带有注释问题的MKMapView

时间:2013-10-31 08:05:00

标签: ios iphone mkmapview mapkit mkannotationview

我的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开始每秒重绘一次,并将所有子视图(注释)置于未知的顺序。

如何取消更改注释的顺序?

1 个答案:

答案 0 :(得分:0)

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

旁注:为什么要编写自己的功能来切换跟踪模式?您可以use the official one,它会为您完成所有操作。