【问题标题】:MKMapView with annotations issue带有注释问题的 MKMapView
【发布时间】:2013-10-31 08:05:00
【问题描述】:

我有许多按正确顺序注释的 MKMapView。我有按钮来改变地图模式:

- (IBAction)userDidPressTrackButton:(id)sender {
    if (self.mapView.userTrackingMode == MKUserTrackingModeFollow) {
        self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
        return;
    }

    if (self.mapView.userTrackingMode == MKUserTrackingModeFollowWithHeading) {
        self.mapView.userTrackingMode = MKUserTrackingModeNone;
        return;
    }

    if (self.mapView.userTrackingMode == MKUserTrackingModeNone) {
        self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    }
}

当 mode = MKUserTrackingModeFollowWithHeading 注释开始以随机顺序排列自己。似乎在这种模式下,mapview 开始每秒重新绘制自己,并将所有子视图(注释)以未知的顺序放置。

如何取消注解的改变顺序?

【问题讨论】:

    标签: ios iphone mkmapview mapkit mkannotationview


    【解决方案1】:

    您从mapview.annotations 返回的注释数组不能保证与添加它们的顺序相同。如果您以特殊顺序依赖它们,您可能正在执行viewForAnnotations 函数错误的。它有一个annotation 作为参数,您可以使用它来确定要绘制的视图。通常人们会创建一个自定义类来实现 MKAnnotation 协议,并具有一些附加变量,用于存储创建正确视图所需的数据。当viewForAnnotations 被调用时,他们检查提供的注释是否是他们的特殊类之一,如果是,则提取数据,创建视图并返回它。不需要知道 annotations 数组的顺序,这对你没有任何好处,因为 MKMapView 可以并且会以它喜欢的任何顺序请求 annotations。

    旁注:您为什么要编写自己的函数来切换跟踪模式?您只需use the official one,它就会为您完成所有工作。

    【讨论】:

    • 实际上这个答案没有帮助,但无论如何我没有找到任何其他答案。我只是巧妙地将子视图放在前面。
    • 如果您为了避免编写正确版本的viewForAnnotation 而将地图视图放入另一个子视图以旋转地图以匹配gps 航向,那么您做错了。注释总是期望以未知的顺序排列。你应该画出它要求的那个,而不是特定序列中的第 n 个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多