• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - MKMapView 没有正确删除注释?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:15:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我发现了一些奇怪的东西,也许任何人都熟悉: 我正在向 MKMapView 添加一个简单的 MKPointAnnotation,然后使用 KVO-compliance 修改其坐标属性,然后使用 -removeAnnotation: 删除注释。然而,当我在注释被删除后移动 map 时,图钉再次出现——即使注释被删除了!进一步检查,MKMapView 似乎并没有真正删除注释。

请查看以下代码片段。您可以将它粘贴到一个新的 Xcode iOS 项目中,单个 View 就足够了。将 MKMapView 添加到 View ,然后添加 3 个按钮 Start、Step、Stop,并将它们连接到适当的操作。 “userAnnotation”是 View Controller 中的 MKPointAnnotation ivar。 如果按停止,则 MKMapView 的注释数量会在删除前后打印到控制台。 ARC 已启用。

如何重现:

  1. 按开始;出现一个图钉。
  2. 按步骤;大头针移动了一点。
  3. 按下停止;图钉消失了。
  4. 拖动 map - 大头针重新出现!

如果你按开始然后停止(不是按步骤)​​,注释被正确删除,检查控制台中的计数器:1,1 =奇怪; 1, 0 = 正常

知道发生了什么吗?我认为我做的 KVO 是正确的。

- (IBAction)startTouchedid)sender
{
    userAnnotation = [[MKPointAnnotation alloc] init];
    userAnnotation.coordinate = CLLocationCoordinate2DMake(50.85, 4.72); // some coord
    [mapView addAnnotation:userAnnotation];

    MKMapPoint p = MKMapPointForCoordinate(userAnnotation.coordinate);
    double w = 500 * MKMapPointsPerMeterAtLatitude(userAnnotation.coordinate.latitude);
    [mapView setVisibleMapRect:MKMapRectMake(p.x - w, p.y - w, 2*w, 2*w) animated:NO];
}

- (void)nextLocation
{
    MKMapPoint p = MKMapPointForCoordinate(userAnnotation.coordinate);
    p.x += 10 * MKMapPointsPerMeterAtLatitude(userAnnotation.coordinate.latitude);

    [userAnnotation willChangeValueForKey"coordinate"];
    userAnnotation.coordinate = MKCoordinateForMapPoint(p);
    [userAnnotation didChangeValueForKey"coordinate"];

    NSLog(@"pin at %@, %@", MKStringFromMapPoint(p), [NSThread currentThread]);
}

- (IBAction)stepTouchedid)sender
{
    [self nextLocation];
}

- (IBAction)stopTouchedid)sender
{
NSLog(@"mark 10, map has %u annotations, %@", [mapView.annotations count], userAnnotation);
    [mapView removeAnnotation:userAnnotation];
NSLog(@"mark 20, map has %u annotations, %@", [mapView.annotations count], [NSThread currentThread]);
    userAnnotation = nil;
}



Best Answer-推荐答案


我不确定到底是什么问题,但如果您使用的是 setter(您就是这样;userAnnotation .coordinate = ... 只是 [userAnnotation setCoordinate:...])。

尝试删除 willChange/didChange 看看是否会有所改善?

关于ios - MKMapView 没有正确删除注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165245/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap