我有一个 MKMapView ,其中有一些注释。现在,每当区域发生变化时,我都会加载新的注释。这工作正常,但如果某些注释靠近 map View 的边界并且您点击它,注释信息窗口会弹出,并且 mkmapview 区域会移动一点(以便它可以很好地显示窗口),但问题是还调用了regionDidChangeAnimated并重新加载我的所有注释,当然还隐藏了信息窗口。
我知道您可以在重新加载注释时再次点击注释,但对于用户来说,它似乎已损坏,而且您也可以在不需要时重新加载注释。
有什么方法可以检查 RegionDidChangeAnimated 是否因用户操作或以编程方式被调用?
谢谢。
最佳答案
当点击 map View 边缘附近的注释并移动 map 以适合标注时,事件顺序为:
regionWillChangeAnimated
被调用didSelectAnnotationView
被调用regionDidChangeAnimated
被调用
使用两个 BOOL
ivar 标志,您可以监视此序列并防止在 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;
}
关于objective-c - MKMapView RegionDidChangeAnimated 由用户操作或程序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076555/