Joe*_*rea 30 mapkit mkpinannotationview ios
在调用MKMapView的setCenterCoordinate:animated:方法(没有动画)后,我想调用selectAnnotation:animated :(带动画),以便从新居中的图钉中弹出注释.
现在,我只是观察mapViewDidFinishLoadingMap:然后选择注释.但是,这是有问题的.例如,当不需要加载其他地图数据时,不会调用此方法.在这些情况下,我的注释未被选中.:(
很好.我可以在设置中心坐标后立即调用它.啊,但在这种情况下,它也有可能存在的地图数据加载(但还没有完成加载还).我冒险过早地调用它,动画最多也会变得不稳定.
因此,如果我理解正确,这不是知道我的坐标是否可见的问题,因为它可能几乎偏离屏幕距离并且必须加载新的地图数据.相反,它需要知道是否需要加载新的地图数据,然后相应地采取行动.
有关如何实现这一点的任何想法,或者如何在将注释生效的坐标重新定位到地图视图后以其他方式(可靠地)选择注释?
线索赞赏 - 谢谢!
小智 36
我遇到了同样的问题,但发现了一个看似可靠和合理的解决方案:
实现委托方法mapView:didAddAnnotationViews:.当我尝试在委托方法中直接选择注释时,标注随引脚丢弃!这看起来很奇怪,所以我加了一点半的延迟.
-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
[self performSelector:@selector(selectInitialAnnotation)
withObject:nil afterDelay:0.5];
}
Run Code Online (Sandbox Code Playgroud)按照您的预期选择初始注释,但调用selectAnnotation:animated;
-(void)selectInitialAnnotation {
[self.mapView selectAnnotation:self.initialAnnotation animated:YES];
}
Run Code Online (Sandbox Code Playgroud)似乎selectAnnotation:animated:在某些条件下不会调用它.与MKMapView文档比较:
如果指定的注释不在屏幕上,因此没有关联的注释视图,则此方法无效.
比使用固定超时更一致的方法是收听regionDidChange回调.将地图的中心坐标设置为所需的注释,并在调用regionDidChange方法时,在中心选择注释,以打开标注.
这是我拍摄的5个引脚之间随机运行的视频.
首先,转到注释的中心坐标.假设注释对象已命名thePin.
- (void)someMethod {
[map setCenterCoordinate:thePin.coordinate animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
然后在该regionDidChange方法中,选择此注释.
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
[map selectAnnotation:thePin animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
那么仅供参考,这就是文档所说的,
如果指定的注释不在屏幕上,因此没有关联的注释视图,则此方法无效.
因此,如果我想调用setCenterCoordinate:animated:或者setRegion:animated:然后我想通过调用来选择注释selectAnnotation:animated:,那么注释将不会被选中,并且由于文档中上面提到的完全相同的原因而不会出现标注,所以它的方式将是很高兴有类似的东西,setCenterCoordinate:animated:ComletionBlock但它不在那里..!对我有用的方法如下,
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut animations:^{
[self.mapView setCenterCoordinate:location.coordinate animated:YES];
} completion:^(BOOL finished) {
[self.mapView selectAnnotation:location animated:YES];
}];
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个完成块,您可以使用它来选择注释.
| 归档时间: |
|
| 查看次数: |
13334 次 |
| 最近记录: |