我正在使用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元素。