gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:59:42 24 4
gpt4 key购买 nike


我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com