hal*_*zak 2 annotations objective-c mkmapview
我有一个MKMapView,里面有一些注释.现在,每当区域发生变化时,我都会加载新的注释.这工作正常,但如果某些注释靠近地图视图的边界并点击它,则会弹出注释信息窗口并且mkmapview区域移动一点(这样它可以很好地显示窗口),但问题是还调用了regionDidChangeAnimated并重新加载了我的所有注释,当然还隐藏了信息窗口.
我知道你可以在重新加载时再次点击注释,但是对于用户来说它似乎已经破坏了,而且当你不需要时你也会重新加载注释.
有没有办法检查是否由于用户操作或以编程方式调用regionDidChangeAnimated?
谢谢.
小智 5
当点击地图视图边缘附近的注释并移动地图以适合标注时,事件序列为:
regionWillChangeAnimated 叫做didSelectAnnotationView 叫做regionDidChangeAnimated 叫做使用两个BOOLivar标志,您可以观察此序列并防止重新加载注释regionDidChangeAnimated.
例如:
-(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
regionWillChangeAnimatedCalled = YES;
regionChangedBecauseAnnotationSelected = NO;
}
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
regionChangedBecauseAnnotationSelected = regionWillChangeAnimatedCalled;
}
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
if (!regionChangedBecauseAnnotationSelected) //note "!" in front
{
//reload (add/remove) annotations here...
}
//reset flags...
regionWillChangeAnimatedCalled = NO;
regionChangedBecauseAnnotationSelected = NO;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5225 次 |
| 最近记录: |