objective-c - MKMapView RegionDidChangeAnimated 由用户操作或程序调用

标签 objective-c annotations mkmapview


我有一个 MKMapView ,其中有一些注释。现在,每当区域发生变化时,我都会加载新的注释。这工作正常,但如果某些注释靠近 map View 的边界并且您点击它,注释信息窗口会弹出,并且 mkmapview 区域会移动一点(以便它可以很好地显示窗口),但问题是还调用了regionDidChangeAnimated并重新加载我的所有注释,当然还隐藏了信息窗口。
我知道您可以在重新加载注释时再次点击注释,但对于用户来说,它似乎已损坏,而且您也可以在不需要时重新加载注释。
有什么方法可以检查 RegionDidChangeAnimated 是否因用户操作或以编程方式被调用?
谢谢。

最佳答案

当点击 map View 边缘附近的注释并移动 map 以适合标注时,事件顺序为:

  1. regionWillChangeAnimated 被调用
  2. didSelectAnnotationView 被调用
  3. 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/

相关文章:

iphone - iOS - 仪器僵尸检测没有帮助

annotations - 如何使@Schedule 方法一次只调用一次

java - JFreeChart 的分层注释

swift - 如何在移动 map 时更改注释的大小?

iphone - 如何正确使用 insertRowsAtIndexPaths?

objective-c - 隐藏 UIDatePicker 的事件

java - 我将如何在 Java 中创建允许我注释文本的文本编辑器?

ios - 如何在ios中使用谷歌地图而不是默认 map ?

ios - 使用什么代替 indexPath.row?对于非表?

Ios 位置更新不断获取 didUpdateLocations