【问题标题】:How to propagate the action from SKScene component to UIViewController如何将动作从 SKScene 组件传播到 UIViewController
【发布时间】:2020-12-18 20:27:10
【问题描述】:

在 XCode 12 中,使用 Swift 5,使用 Game SpriteKit 技术创建一个新项目。除其他外,这会产生:

  • GameViewController.swift
  • GameScene.swift

在 GameScene.swift 中我添加了

  1. 在类定义之后

    let tapRec2 = UITapGestureRecognizer()
    
  2. 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)
    
  3. 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。我做错了什么?

【问题讨论】:

    标签: pushviewcontroller skscene


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多