设置<uitouch>没有成员“位置”

时间:2017-09-01 09:18:53

标签: swift3 uiviewcontroller member uitouch

我正在处理的项目的一部分要求我使用触摸来移动对象。我目前正在运行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
}

2 个答案:

答案 0 :(得分:1)

location确实Set<UITouch>的成员。您应该访问该集的UITouch元素才能访问它。

thumbstickLocation = touches.first!.location(in: self.view)

...但使用if letguard let安全访问它会更好:

if let lastTouch = touches.first {
    thumbstickLocation = lastTouch.location(in: self.view)
    Thumbstick.center = thumbstickLocation
}

答案 1 :(得分:0)

编译错误是正确的,Set<UITouch>没有成员locationUITouch拥有财产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)
    }
}