
overrIDe func touchesBegan(_ touches: Set<UItouch>,with event: UIEvent?) { let touch = touches.first as UItouch! let touchLocation = touch?.location(in: self) let touchednode = self.atPoint(touchLocation!)if touch?.tapCount == 1 { print("single tap") if let name = touchednode.name { if name == "enemySprite" { //handle single Tap } } }if touch?.tapCount == 2 { print("double tap") if let name = touchednode.name { if name == "enemySprite" { //handle double Tap } } }} 如何使每个抽头计数互斥?
UPDATE
根据Apurv的回答和Whirlwind的评论我认为下面的代码显示了工作.
overrIDe func dIDMove(to vIEw: SKVIEw) { var tapGesture = UITapGestureRecognizer(target: self,action: #selector(self.vIEw.sampleTapGestureTapped(recognizerMethod:))) self.vIEw.addGestureRecognizer(tapGesture!) tapGesture.numberOfTapsrequired = 1; var tapGestureDouble = UITapGestureRecognizer(target: self,action: #selector(self.vIEw.sampleTapGestureTapped(recognizerMethod2:))) self.vIEw.addGestureRecognizer(tapGestureDouble!) tapGestureDouble.numberOfTapsrequired = 2; [tapGesture requireGestureRecognizerToFail : tapGestureDouble];} 它不起作用,我得到错误说,
Value of type ’SKVIEw?’ has no member ‘sampleTapGestureTapped(recognizerMethod:)’ and Value of type ’SKVIEw?’ has no member ‘sampleTapGestureTapped(recognizerMethod2:)’
指向轻敲手势变量的声明
另外,我得到错误
Expected Expression in the container literal
指向上面方法中的最后一行.
我想我在这里错过了一些东西,我真的很感激对此的一些帮助和澄清.
解决方法 您不必访问VIEwController …您可以处理场景中的点击,如下所示:import SpriteKitclass GameScene: SKScene { var recognizers:[UIGestureRecognizer] = [] overrIDe func dIDMove(to vIEw: SKVIEw) { // Get label node from scene and store it for use later let single = UITapGestureRecognizer(target: self,action: #selector(GameScene.singleTapHandler(recognizer:))) vIEw.addGestureRecognizer(single) single.numberOfTapsrequired = 1 recognizers.append(single) let double = UITapGestureRecognizer(target: self,action: #selector(GameScene.doubleTapHandler(recognizer:))) vIEw.addGestureRecognizer(double) double.numberOfTapsrequired = 2 recognizers.append(double) single.require(toFail: double) } overrIDe func willMove(from vIEw: SKVIEw) { super.willMove(from: vIEw) for recognizer in recognizers { self.vIEw?.removeGestureRecognizer(recognizer) } recognizers.removeAll() } func singleTapHandler(recognizer:UITapGestureRecognizer){ print("Single tap detected") } func doubleTapHandler(recognizer:UITapGestureRecognizer){ print("Double tap detected") }} 当然,在VIEwController上调用一些方法可以通过几种方式完成(例如委托)……但是,根据你的评论,我认为处理当前场景中的点击是你想要实现的.
编辑:
要回答评论中的问题…您可以通过在视图中查找触摸位置,将其转换为场景中的位置以及抓取该位置处的节点来获取触摸的节点:
func singleTapHandler(recognizer:UITapGestureRecognizer){ print("Single tap detected") let locationInVIEw = recognizer.location(in: self.vIEw) let locationInScene = self.convertPoint(fromVIEw: locationInVIEw) print(locationInScene) let node = atPoint(locationInScene) if let nodename = node.name { //do stuff } //or if let sprite = node as? SKSpriteNode { // node is an SKSpriteNode } } 总结 以上是内存溢出为你收集整理的ios – 如何在touchesBegan方法中发生双击时防止单击被调用全部内容,希望文章能够帮你解决ios – 如何在touchesBegan方法中发生双击时防止单击被调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)