我正在使用swift在XCode中制作一个SpriteKit游戏。我想在菜单中定制按钮,我正在跟随this tutorial来做。除了touchesMoved功能,一切正常。

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
var touch: UITouch = touches.allObjects[0] as UITouch
var location: CGPoint = touch.locationInNode(self)

if defaultButton.containsPoint(location) {
    activeButton.hidden = false
    defaultButton.hidden = true
} else {
    activeButton.hidden = true
    defaultButton.hidden = false
}
}

显然,在Swift 2中,“touch.allObjects[0]as UITouch”不再有效。我一直在寻找替代品,但没有找到任何有效的。我怎么能替换那行代码?

最佳答案

出于某种原因,本教程使用NSSet而不是Set<UITouch>中的touchesMoved。我想知道他们是否把教程从Objective-C翻译成Swift,却错过了更新?

func touchesMoved(_ touches: Set<UITouch>,
        withEvent event: UIEvent?)

touchesMoved - Apple docs
注意,在您的代码中,touch参数的类型是NSSet,而Apple文档的类型是Set<UITouch>
一旦切换到Set<UITouch>,请尝试使用touches.first as! UITouch
如果可以为零,请小心,我不熟悉iOS上的用户输入功能。
如果以后允许多点触摸,则需要检查整个集合,而不是只获取第一个(也是唯一的)UITouch元素。

10-06 06:17