如何将动作从 SKScene 组件传播到 UIViewController
Posted
技术标签:
【中文标题】如何将动作从 SKScene 组件传播到 UIViewController【英文标题】:How to propagate the action from SKScene component to UIViewController 【发布时间】:2020-12-18 20:27:10 【问题描述】:在 XCode 12 中,使用 Swift 5,使用 Game SpriteKit 技术创建一个新项目。除其他外,这会产生:
GameViewController.swift GameScene.swift在 GameScene.swift 中我添加了
在类定义之后
let tapRec2 = UITapGestureRecognizer()
in override func didMove(to view: SKView)
tapRec2.addTarget(self, action:#selector(GameScene.tappedView2(_:) ))
tapRec2.numberOfTouchesRequired = 1
tapRec2.numberOfTapsRequired = 2 //2 taps i
self.view!.addGestureRecognizer(tapRec2)
tappedView2 函数的实现来检测双击。
@objc func tappedView2(_ sender:UITapGestureRecognizer)
let controller = self.view?.window?.rootViewController
let new_controller = ViewController()
print("double click detected")
controller?.navigationController?.pushViewController(new_controller,
animated: true)
我编译并运行它,应用程序正常启动,如果我双击它会检测到它,但是没有显示 ViewController。我做错了什么?
【问题讨论】:
【参考方案1】:通过将 tappedView2 简化为以下代码找到了解决方案:
@objc func tappedView2(_ sender:UITapGestureRecognizer)
let new_controller = ViewController()
self.view?.window?.rootViewController = new_controller
并将 UIViewController 简化为:
import UIKit
import Foundation
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
【讨论】:
启动新控制器的方法不合适,因为它替换了 rootViewController 而不是 pushViewController。以上是关于如何将动作从 SKScene 组件传播到 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SKScene 到 UIViewController?