swift – touchesEnded不被认可
发布时间:2020-12-14 04:35:38 所属栏目:百科 来源:网络整理
导读:当我用touchesBegan()调用时 override func touchesBegan(touches: SetUITouch,withEvent event: UIEvent?) { print("TOUCH_BEGAN")} 我得到了打印声明. 我注意到,如果我不移动接触点, override func touchesEnded(touches: SetUITouch,withEvent event: UIE
当我用touchesBegan()调用时
override func touchesBegan(touches: Set<UITouch>,withEvent event: UIEvent?) { print("TOUCH_BEGAN") } 我得到了打印声明. override func touchesEnded(touches: Set<UITouch>,withEvent event: UIEvent?) { print("TOUCH_ENDED") } 没有被召唤,但是当我移动接触点时.调用touchesEnded()需要一些最小的移动吗?如果是这样,有没有办法覆盖这个,以确保始终调用touchesEnded()? 完整的代码太长了,无法添加,但下面多一点: import SpriteKit import UIKit import Foundation class GameScene: SKScene,SKPhysicsContactDelegate { // MARK: Properties var touchStart: CGPoint? let minSwipeDistance:CGFloat = 22 var distance: CGFloat = 0 override func didMoveToView(view: SKView) { super.didMoveToView(view) //... // MARK: INCLUDE SWIPE GESTURES let swipeRight: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self,action: Selector("swipedRight:")) swipeRight.direction = .Right swipeRight.cancelsTouchesInView = false swipeRight.delaysTouchesEnded = false view.addGestureRecognizer(swipeRight) let swipeLeft: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self,action: Selector("swipedLeft:")) swipeLeft.direction = .Left swipeLeft.cancelsTouchesInView = false swipeLeft.delaysTouchesEnded = false view.addGestureRecognizer(swipeLeft) let swipeUp: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self,action: Selector("swipedUp:")) swipeUp.direction = .Up swipeUp.cancelsTouchesInView = false swipeUp.delaysTouchesEnded = false view.addGestureRecognizer(swipeUp) let swipeDown: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self,action: Selector("swipedDown:")) swipeDown.direction = .Down swipeDown.cancelsTouchesInView = false swipeDown.delaysTouchesEnded = false view.addGestureRecognizer(swipeDown) } // MARK: ******* User Interaction ****** override func touchesBegan(touches: Set<UITouch>,withEvent event: UIEvent?) { if let touch = touches.first { touchStart = touch.locationInNode(self) let location = touch.locationInNode(self) let node = nodeAtPoint(location) } } override func touchesMoved(touches: Set<UITouch>,withEvent event: UIEvent?) { } override func touchesCancelled(touches: Set<UITouch>?,withEvent event: UIEvent?) { } override func touchesEnded(touches: Set<UITouch>,withEvent event: UIEvent?) { if let touch = touches.first,start = touchStart { let location = touch.locationInNode(self) // Compute the distance between the two touches let dx = location.x - start.x let dy = location.y - start.y distance = sqrt(dx*dx + dy*dy) if distance < minSwipeDistance { let node = nodeAtPoint(location) print("NODE NAME: (node.name)") } } // Reset the initial location touchStart = nil } // MARK: handle swipes func swipedRight(sender: UISwipeGestureRecognizer) { print("swiped right") } func swipedLeft(sender: UISwipeGestureRecognizer) { print("swiped left") } func swipedUp(sender: UISwipeGestureRecognizer) { print("swiped up") } func swipedDown(sender: UISwipeGestureRecognizer) { print("swiped down") } } 解决方法
您无法确保调用touchesEnded,因为可能会调用touchesCancelled.您应该始终在两者中实现结束功能.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |