大佬教程收集整理的这篇文章主要介绍了ios – 如何在touchesBegan方法中发生双击时防止单击被调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 } } } }
如何使每个抽头计数互斥?
根据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
指向上面方法中的最后一行.
import SpriteKit class 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方法中发生双击时防止单击被调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。