Swift - 如何让UIGestureRecognizer函数返回值

时间:2015-05-15 01:47:52

标签: swift mkmapview uigesturerecognizer

我想请求函数注释返回坐标(CLLocationCoordinate2D)以供其他函数使用,这里是我的部分代码:

// ULMap is MapView. 

override func viewDidLoad() {
    var longPressGR = UILongPressGestureRecognizer(target: self, action: "annotation:")
    longPressGR.minimumPressDuration = 1
    UImap.addGestureRecognizer(longPressGR)
}

func annotation(gesture: UIGestureRecognizer){

    //Coordinate
    var touchPoint = gesture.locationInView(self.UImap)
    var coordinate = UImap.convertPoint(touchPoint, toCoordinateFromView: self.UImap)

}

我试过这个,但它不起作用:

func annotation(gesture: UIGestureRecognizer) -> CLLocationCoordinate2D{

    //Coordinate
    var touchPoint = gesture.locationInView(self.UImap)
    var coordinate = UImap.convertPoint(touchPoint, toCoordinateFromView: self.UImap)

    return coordinate
}

有办法做到这一点吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

手势识别器调用之类的东西无法返回任何内容,因为您不是那个正在调用它们的人。它们被系统调用,因此任何返回值都将通过您无法访问的代码传播回来。您应该为坐标创建一个类级变量并设置它。

所以不要说     var coordinate = UImap.convertPoint(touchPoint,toCoordinateFromView:self.UImap)

你宣布

var coordinate:CLLocationCoordinate2D

在类范围内,然后在你的函数中

coordinate = UImap.convertPoint(touchPoint, toCoordinateFromView: self.UImap)

然后坐标将始终是最近设置的坐标。如果需要跟踪多个数组,可以将它们添加到数组中。