gpt4 book ai didi

iphone - 更新 MKMapView 上自定义注释的标题/副标题

转载 作者:行者123 更新时间:2023-12-03 20:58:17 25 4
gpt4 key购买 nike

我创建了一个自定义注释来显示我的数据。数据来自移动的车辆,我必须更新它们在 map 上的位置及其标题(它显示最后更新时间)。

我的第一个方法是简单地删除所有注释并重新创建它们。然而,这会导致大量可怕的闪烁( map 清除,然后所有注释再次出现)并且 map 在重绘时阻塞。小于最优解。

在 OS4 SDK 中,他们改进了 MKMapViewAnnotation,我现在可以设置坐标(它们之前是只读的)。更改坐标可以将 View 很好地移动到应有的位置,而不会出现任何闪烁。这解决了我的问题之一。

API文档中说,更改MKAnnotation的标题将更新MKAnnotationView。事实上,MKPinView 就是这种情况。如果我更新 MKAnnotation 的坐标和标题,图钉就会移动并显示新数据。

如何使用自定义 MKAnnotationView 获得相同的结果?我看不到任何方法来要求刷新 View 。我尝试在 MKAnnotationView 上调用 setNeedsLayout,但这只会导致 View 消失。

干杯。

最佳答案

MKMapView 使用KVO观察 titlesubtitle 属性的变化。确保 map View 注意到您的更改的最简单方法是使它们成为属性并使用 setTitle:/setSubtitle: 方法(或 self.title = @ "..."; — 请注意,需要 self. 表示法):

CustomAnnotation.h

@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;

- (void)changeAnnotation;

CustomAnnotation.m

@synthesize title, subtitle;

- (void)changeAnnotation {
self.title = @"New title!";
[self setSubtitle:@"New subtitle!"];
}

综合属性 setter 为您处理严格的键值观察。否则,您必须调用willChangeValueForKey: and didChangeValueForKey:你自己;这些是在 NSObject 中实现的:

[self willChangeValueForKey:@"title"];
[title release];
title = @"New title.";
[self didChangeValueForKey:@"title"];

关于iphone - 更新 MKMapView 上自定义注释的标题/副标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3316552/

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