gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:15:59 25 4
gpt4 key购买 nike

我发现了一些奇怪的东西,也许这对任何人来说都很熟悉:我将一个简单的 MKPointAnnotation 添加到 MKMapView,然后使用 KVO-compliance 修改其坐标属性,然后使用 -removeAnnotation: 删除注释。但是,当我在删除注释后移动 map 时,图钉再次出现 - 即使注释应该被删除!进一步检查,看起来 MKMapView 并没有真正删除注释。

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

如何重现:

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

如果您按 Start 然后 Stop(而不是按 Step),注释将被正确删除,请检查控制台中的计数器:1, 1 = weird; 1, 0 = 好的

知道发生了什么吗?我认为我正确地执行了 KVO 操作。

- (IBAction)startTouched:(id)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)stepTouched:(id)sender
{
[self nextLocation];
}

- (IBAction)stopTouched:(id)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;
}

最佳答案

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

尝试删除 willChange/didChange,看看是否能改善情况?

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

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