我正在尝试使用一个UISwipeGestureRecognizer,这样当用户在SKScene的屏幕上向右滑动时,它就会执行一个函数。这是我的代码
我宣布,在场景的顶部。
let swiperight = UISwipeGestureRecognizer();在viewDidLoad()函数中
swiperight.addTarget(self, action: #selector(GameScene.swipedRight));
swiperight.direction = .right;
self.view?.addGestureRecognizer(swiperight);然后是要执行的函数
@objc func swipedRight() {
print("Object has been swiped right")
}然而,当我运行我的应用程序并在场景中滑动时,什么也没有发生,也没有任何控制台输出。
我用的是swift 4,SpriteKit和Xcode9.2。我在我的iPhone 6s上运行这个应用程序,运行最新的非测试版IOS。
发布于 2018-01-13 06:05:39
你应该这样展示你的场景:
在你的视图控制器中,在顶部声明你的场景。
var mainMenu: MainMenu?覆盖viewDidLoad方法并按如下方式呈现场景:(其中SKScene文件名为MainMenu.sks)
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
mainMenu = MainMenu(fileNamed: "MainMenu")
mainMenu?.scaleMode = .fill
view.presentScene(mainMenu)
}
}确保您演示的场景是SKScene类型的
import SpriteKit
import GameplayKit
class MainMenu: SKScene {
}确保您的viewControllers视图是SKView类型的。例如,我的故事板是这样的。

呈现场景后,在didMoveTo方法中设置手势识别器,因为这是在呈现场景后调用的,这是您想要的。而viewDidLoad是在视图呈现之前调用的。
如果没有sks文件,则必须将场景显示为:
scene = MainMenu(size: (view.bounds.size))你要展示的场景必须是这样的:
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")
}
}发布于 2018-01-16 11:10:28
尝试使SKScene符合UIGestureRecognizerDelegate并将swiperight.delegate特性设置为场景。这将确保即使您正在将手势识别器添加到视图中,手势的处理也会被“委托”到您的场景中。
https://stackoverflow.com/questions/48233513
复制相似问题