0

我有许多按正确顺序注释的 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 开始每秒重新绘制自己,并将所有子视图(注释)以未知的顺序放置。

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

4

1 回答 1

0

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

旁注:您为什么要编写自己的函数来切换跟踪模式?你可以只使用官方的,它会为你做这一切。

于 2013-11-01T00:13:52.807 回答