如何将动作从 SKScene 组件传播到 UIViewController

问题描述

在 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。我做错了什么?

解决方法

通过将 tappedView2 简化为以下代码找到了解决方案:

        Q_upper     Q_lower     Q_middle    distance
 2127   79.746342   76.430846   83.151515   13.441338

并将 UIViewController 简化为:

  @objc func tappedView2(_ sender:UITapGestureRecognizer) {
    let new_controller = ViewController()
    self.view?.window?.rootViewController = new_controller
  }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...