相关疑难解决方法(0)

即使设置为可拖动,MKAnnotation Pin也不会拖动

我一直试图在mapview上放置一个可拖动的注释多年.(我正在使用默认的引脚,而不是我自己的引脚)到目前为止,我只能在设定的坐标处显示它(实际上并不是很大的成就),我需要首先获得注释以对选择作出反应,它不会永远不会被这个didChangeDragState功能所接受.然后我需要能够拖动它,将它放在一个新的位置并获得新位置的坐标.

我对Swift来说是个新手,但我已经开始了一个相当困难的项目.我看了几乎所有我在google上寻找" MKAnnotationSwift中的可拖动mapkit"和类似变体的东西.(编辑:我没有找到任何解释我的问题的答案,所有其他答案都提供了如何上传个性化的答案MKAnnotation.他们都有标题字段,但没有一个答案提到标题字段是必要的,结果证明是主要的问题.他们只提到我应该设置dragState来控制引脚的移动,但在我的情况下,这看起来是不正确的,如下所示)无论如何 !下面是我的代码,我尝试实现mapView并添加注释.

var currentLat:CLLocationDegrees!
var currentLong:CLLocationDegrees!
var currentCoordinate:CLLocationCoordinate2D! 
....
override func viewDidAppear(animated: Bool) {
    let annotation = PinAnnotationClass()
    annotation.setCoordinate(currentCoordinate)
    //annotation.setCoordinate(currentCoordinate)
    //AnnotationView()
    self.mapView.addAnnotation(annotation)
}

override func viewDidLoad() {
    super.viewDidLoad()
    println("hello!")
    self.mapView.delegate = self
    loadMap()

    findPath()
}

func loadMap()
{
    currentCoordinate = CLLocationCoordinate2DMake(currentLat, currentLong)
    var mapSpan = MKCoordinateSpanMake(0.01, 0.01)
    var mapRegion = MKCoordinateRegionMake(currentCoordinate, mapSpan)
    self.mapView.setRegion(mapRegion, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

随着扩展:

extension DetailsViewController: MKMapViewDelegate {    
func mapView(mapView: MKMapView!,
    viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {

        if annotation …
Run Code Online (Sandbox Code Playgroud)

mkpinannotationview mkmapview ios mkmapviewdelegate swift

10
推荐指数
1
解决办法
3632
查看次数

iOS MapKit拖动注释(MKAnnotationView)不再平移地图

我正在学习在我初出茅庐的iOS应用程序中使用MapKit.我正在使用我的一些模型实体作为注释(将<MKAnnotation>协议添加到其头文件中).我还创建自定义MKAnnotationViews并将draggable属性设置为YES.

我的模型对象有一个location属性,它是一个CLLocation*.为了符合<MKAnnotation>协议,我在该对象中添加了以下内容:

- (CLLocationCoordinate2D) coordinate {
    return self.location.coordinate;
}

- (void) setCoordinate:(CLLocationCoordinate2D)newCoordinate {
    CLLocation* newLocation = [[CLLocation alloc]
        initWithCoordinate: newCoordinate
        altitude: self.location.altitude
        horizontalAccuracy: self.location.horizontalAccuracy
        verticalAccuracy: self.location.verticalAccuracy
        timestamp: nil];
    self.location = newLocation;
}

- (NSString*) title {
    return self.name;
}

- (NSString*) subtitle {
    return self.serialID;
}
Run Code Online (Sandbox Code Playgroud)

所以,我有4个必需的方法.而且他们非常直截了当.当我阅读苹果文档MKAnnotationView@draggable财产时,它说如下:

将此属性设置为YES会使用户可以拖动注释.如果是,则关联的注释对象还必须实现setCoordinate:方法.此属性的默认值为NO.

在其他地方,MKAnnotation文档说:

您对此属性的实现必须符合键值观察(KVO).有关如何实现对KVO的支持的更多信息,请参阅键值观察编程指南.

我已经读过那篇(简短的)文件了,我根本不清楚我应该做些什么来实现这一目标,以便coordinate我从我的location财产中得到的是一个适当的财产本身.

但我有理由相信它不能正常工作.当我拖动它时,它会移动,但是当我平移地图时它不再重新定位.

UPDATE

所以我试着玩MKPinAnnotationView股票.为此,我只是注释了我的委托mapView:viewForAnnotation:方法.我发现默认情况下这些都不可拖动.我添加了mapView:didAddAnnotationViews:我的委托以设置 …

properties key-value-observing mapkit ios ios7

3
推荐指数
1
解决办法
4328
查看次数