当我打电话touchesBegan()
与touchesEnded不被认可
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")
}
}
你不应该自己调用touchesBegan()。 – TechBee
@TechBee我不明白你的意思? touchesBegan(),touchesMoved()和touchesEnded()等方法都可以称为 –
这些是调用委托方法。将它们视为回调方法。你想不要打电话给他们。 – TechBee