gpt4 book ai didi

objective-c - MKMapView addAnnotation 不立即添加注释

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:50 24 4
gpt4 key购买 nike

我有以下简单代码:

self.departureAnnotation = [[UserAnnotation alloc] init];
self.departureAnnotation.coordinate = self.map.centerCoordinate;
[self.map addAnnotation:self.departureAnnotation];

[self.map selectAnnotation:self.departureAnnotation animated:YES];

这段代码应该做的(显然)是将注释添加到 map 并立即选择它。

尽管如此,运行 iOS 5.1.1 的未越狱 iPhone 4S 上的这段代码并未选择注释(未显示标注),但这在 iOS 6 模拟器中运行良好。

为了解决这个问题,我做了以下操作,这基本上延迟了 pin 的选择 0.2 秒,这是我不喜欢的:

self.departureAnnotation = [[UserAnnotation alloc] init];
self.departureAnnotation.coordinate = self.map.centerCoordinate;
[self.map addAnnotation:self.departureAnnotation];

[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(selectPin:) userInfo:self.departureAnnotation repeats:NO];

- (void)selectPin:(NSTimer *)timer
{
[self.map selectAnnotation:timer.userInfo animated:YES];

}

为什么会这样?

PS:此外,按照相同的模式,如果我检查 [self.map viewForAnnotation: self.departureAnnotation] 而不是选择图钉,则 View 为零。延迟 0.2 秒后,就可以了。

最佳答案

MKMapView 可能需要 run loop 循环结束才能给你注解 View /选择注解。如果是这样,请不要使用计时器,将您的 selectAnnotation:animated: 分派(dispatch)到下一个运行循环周期 ...

dispatch_async( dispatch_get_main_queue(), ^{
[self.map selectAnnotation:self.departureAnnotation animated:YES];
} );

...可能会有帮助。

文档还指出您需要立即添加注释,因为 MKMapView 决定哪个注释在屏幕上/不在屏幕上,因此它会返回它的 View 。

只要我的 0.02 美元 ...

关于objective-c - MKMapView addAnnotation 不立即添加注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530102/

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