2013-10-31 99 views
0

我有MKMapView有许多注释以正确的顺序。我有按钮更改地图模式:带有注释问题的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; 
    } 
} 

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

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

回答

0

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

附注:为什么你要编写自己的功能来切换跟踪模式?你可以只需use the official one,它会为你做这一切。

+0

其实这个答案没有帮助,但无论如何我没有找到任何其他答案。我只是简单地把子视图放在前面。 –

+0

如果您已将地图视图放入另一个子视图中以旋转地图以匹配gps标题,以避免编写“viewForAnnotation”的正确版本,那么您就错了。预计注释总是处于未知的顺序。你应该画出它所要求的那一个,而不是以特定顺序排列第n个。 – Craig