首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISwipeGestureRecognizer不工作Swift 4 SpriteKit

UISwipeGestureRecognizer不工作Swift 4 SpriteKit
EN

Stack Overflow用户
提问于 2018-01-13 04:23:50
回答 2查看 1.5K关注 0票数 1

我正在尝试使用一个UISwipeGestureRecognizer,这样当用户在SKScene的屏幕上向右滑动时,它就会执行一个函数。这是我的代码

我宣布,在场景的顶部。

代码语言:javascript
复制
let swiperight = UISwipeGestureRecognizer();

viewDidLoad()函数中

代码语言:javascript
复制
    swiperight.addTarget(self, action: #selector(GameScene.swipedRight));
    swiperight.direction = .right;
    self.view?.addGestureRecognizer(swiperight);

然后是要执行的函数

代码语言:javascript
复制
@objc func swipedRight() {

    print("Object has been swiped right")

}

然而,当我运行我的应用程序并在场景中滑动时,什么也没有发生,也没有任何控制台输出。

我用的是swift 4,SpriteKit和Xcode9.2。我在我的iPhone 6s上运行这个应用程序,运行最新的非测试版IOS。

EN

回答 2

Stack Overflow用户

发布于 2018-01-13 06:05:39

你应该这样展示你的场景:

在你的视图控制器中,在顶部声明你的场景。

代码语言:javascript
复制
var mainMenu: MainMenu?

覆盖viewDidLoad方法并按如下方式呈现场景:(其中SKScene文件名为MainMenu.sks)

代码语言:javascript
复制
override func viewDidLoad() {
     super.viewDidLoad()
     if let view = self.view as! SKView? {
        mainMenu = MainMenu(fileNamed: "MainMenu")
        mainMenu?.scaleMode = .fill
        view.presentScene(mainMenu)
     }
}

确保您演示的场景是SKScene类型的

代码语言:javascript
复制
import SpriteKit
import GameplayKit

class MainMenu: SKScene {

}

确保您的viewControllers视图是SKView类型的。例如,我的故事板是这样的。

呈现场景后,在didMoveTo方法中设置手势识别器,因为这是在呈现场景后调用的,这是您想要的。而viewDidLoad是在视图呈现之前调用的。

如果没有sks文件,则必须将场景显示为:

代码语言:javascript
复制
 scene = MainMenu(size: (view.bounds.size))

你要展示的场景必须是这样的:

代码语言:javascript
复制
class MainMenu: SKScene {
  required init?(coder aDecoder: NSCoder) {
      fatalError("init(coder) is not used in this app")
  }

  override init(size: CGSize) {
      super.init(size: size)
      anchorPoint = CGPoint(x: 0.5, y: 0.5)
      //Setup your sknodes in here.
  }

  override func didMove(to view: SKView) {
      let swipeRight = UISwipeGestureRecognizer(target: self, 
       action:#selector(swipedRight))
      swipeRight.direction = .right
      view.addGestureRecognizer(swipeRight)
  }

  @objc func swipedRight(sender:UISwipeGestureRecognizer){
      print("swiped right")
  }
}
票数 1
EN

Stack Overflow用户

发布于 2018-01-16 11:10:28

尝试使SKScene符合UIGestureRecognizerDelegate并将swiperight.delegate特性设置为场景。这将确保即使您正在将手势识别器添加到视图中,手势的处理也会被“委托”到您的场景中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48233513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档