当我用touchesBegan()调用时 override func touchesBegan(touches: SetUITouch, withEvent event: UIEvent?) { print("TOUCH_BEGAN")} 我得到了打印声明. 我注意到,如果我不移动接触点, override func touchesEnded(touches: SetU
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.您应该始终在两者中实现结束功能.