我正在处理的项目的一部分要求我使用触摸来移动对象。我目前正在运行Swift 3.1和Xcode 8.3.3。第7行给我错误说:
'Set<UITouch>'
类型的值没有成员“location
”
但是我查了一下文档并且它是会员。有一些解决方法吗?我只需要根据触摸和拖动来移动图像。
import UIKit
class ViewController: UIViewController {
var thumbstickLocation = CGPoint(x: 100, y: 100)
@IBOutlet weak var Thumbstick: UIButton!
override func touchesBegan(_ touches:Set<UITouch>, with event: UIEvent?) {
let lastTouch : UITouch! = touches.first! as UITouch
thumbstickLocation = touches.location(in: self.view)
Thumbstick.center = thumbstickLocation
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let lastTouch : UITouch! = touches.first! as UITouch
thumbstickLocation = lastTouch.location(in: self.view)
Thumbstick.center = thumbstickLocation
}
答案 0 :(得分:1)
location
确实不是Set<UITouch>
的成员。您应该访问该集的UITouch
元素才能访问它。
thumbstickLocation = touches.first!.location(in: self.view)
...但使用if let
或guard let
安全访问它会更好:
if let lastTouch = touches.first {
thumbstickLocation = lastTouch.location(in: self.view)
Thumbstick.center = thumbstickLocation
}
答案 1 :(得分:0)
编译错误是正确的,Set<UITouch>
没有成员location
。 UITouch
拥有财产location
。
您实际需要写的是thumbstickLocation = lastTouch.location(in: self.view)
将对象移动到触摸开始的位置。您还可以通过在一行中编写两个函数的主体来使代码更简洁。
通常,您不应该使用强制解包选项,但是使用这两个函数,您可以确保touches
集合只有一个元素(除非您设置视图的isMultipleTouchEnabled
属性到true
,在这种情况下,它将有多个元素),因此touches.first!
永远不会失败。
class ViewController: UIViewController {
var thumbstickLocation = CGPoint(x: 100, y: 100)
@IBOutlet weak var Thumbstick: UIButton!
override func touchesBegan(_ touches:Set<UITouch>, with event: UIEvent?) {
Thumbstick.center = touches.first!.location(in: self.view)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
Thumbstick.center = touches.first!.location(in: self.view)
}
}