gpt4 book ai didi

ios - 添加到 MKMapView 时出现 UILongPressGestureRecognizer 问题

转载 作者:行者123 更新时间:2023-11-28 06:53:27 25 4
gpt4 key购买 nike

我还是 swift 的新手,正在尝试弄清楚如何在 mapview 上添加长按手势注释。

但是,我一直收到这个错误:

libc++abi.dylib: terminating with uncaught exception of type NSException

我的 addAnotation 函数有问题吗?

提前致谢。

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
manager = CLLocationManager()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()

// action = A selector that identifies the method implemented by the target to handle the gesture recognized by the receiver. The action selector must conform to the signature described in the class overview. NULL is not a valid value.
var uilpgr = UILongPressGestureRecognizer(target: self, action: "addAnotation")
uilpgr.minimumPressDuration = 2.0
map.addGestureRecognizer(uilpgr)
}

func addAnotation(gestureRecognizer:UIGestureRecognizer)
{
if(gestureRecognizer.state == UIGestureRecognizerState.Began)
{
//locationInView = Returns the point computed as the location in a given view of the gesture represented by the receiver.
var touchPoint = gestureRecognizer.locationInView(self.map)

//convertPoint = convert a point from map to coordinate
var newCoordinate = self.map.convertPoint(touchPoint, toCoordinateFromView: self.map)

var annotation = MKPointAnnotation()

annotation.coordinate = newCoordinate
annotation.title = "New Annotation"
self.map.addAnnotation(annotation)
}
}

完整代码供您引用:

import UIKit
import MapKit

class ViewController: UIViewController, CLLocationManagerDelegate {

@IBOutlet var map: MKMapView!

var manager: CLLocationManager!


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
manager = CLLocationManager()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()

// action = A selector that identifies the method implemented by the target to handle the gesture recognized by the receiver. The action selector must conform to the signature described in the class overview. NULL is not a valid value.
var uilpgr = UILongPressGestureRecognizer(target: self, action: "addAnotation")
uilpgr.minimumPressDuration = 2.0
map.addGestureRecognizer(uilpgr)
}

func addAnotation(gestureRecognizer:UIGestureRecognizer)
{
if(gestureRecognizer.state == UIGestureRecognizerState.Began)
{
//locationInView = Returns the point computed as the location in a given view of the gesture represented by the receiver.
var touchPoint = gestureRecognizer.locationInView(self.map)

//convertPoint = convert a point from map to coordinate
var newCoordinate = self.map.convertPoint(touchPoint, toCoordinateFromView: self.map)

var annotation = MKPointAnnotation()

annotation.coordinate = newCoordinate
annotation.title = "New Annotation"
self.map.addAnnotation(annotation)
}
}



func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print(locations)
var userLocation:CLLocation = locations[0]
var latitude = userLocation.coordinate.latitude
var longitude = userLocation.coordinate.longitude
var coordinate = CLLocationCoordinate2DMake(latitude, longitude)

var latDelta:CLLocationDegrees = 0.01
var lonDelta:CLLocationDegrees = 0.01
var span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) // MKCoordinateSpan = A structure that defines the area spanned by a map region.

// Mk CoordinateRegion = A structure that defines which portion of the map to display.
var region:MKCoordinateRegion = MKCoordinateRegionMake(coordinate, span)

self.map.setRegion(region, animated: true)
}



override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


}

最佳答案

你只需要在addAnotation之后添加一个冒号:

var uilpgr = UILongPressGestureRecognizer(target: self, action: "addAnotation:")

在您省略冒号的版本中,将调用具有此签名的方法。注意没有参数

func addAnotation()

因此您的 UILongPressGestureRecognizer 正在尝试调用上述未定义的方法,这会导致您的应用程序抛出异常

关于ios - 添加到 MKMapView 时出现 UILongPressGestureRecognizer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34327371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com