我创建了一个自定义注释来显示我的数据。数据来自移动车辆,我必须更新他们在地图上的位置以及他们的标题(它显示最后更新时间)。
我的第一种方法是简单地删除所有注释并重新创建它们。然而,这会导致很多可怕的闪烁(地图清除,然后所有注释再次出现)和地图会在重绘时阻塞。不是最佳解决方案。
在OS4 SDK中,他们改进了MKMapViewAnnotation
,我现在可以设置坐标(它们之前是只读的)。更改坐标可以很好地移动视图,而不会出现任何闪烁。这解决了我的一个问题。
在API文档中说,更改MKAnnotation
的标题会更新MKAnnotationView
。确实是MKPinView
的情况。如果我更新MKAnnotation
的坐标和标题,则引脚会移动并显示新数据。
如何使用自定义MKAnnotationView
获得相同的结果?我看不出任何方式要求视图刷新。
我尝试在setNeedsLayout
上调用MKAnnotationView
,但这只会导致视图消失。
干杯。
答案 0 :(得分:3)
MKMapView
使用KVO观察对title
和subtitle
属性的更改。确保地图视图注意到您的更改的最简单方法是使其成为属性并使用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!"];
}
合成属性设置器为您处理键值观察的严格性。否则,您必须自己致电willChangeValueForKey:
and didChangeValueForKey:
;这些是在NSObject
:
[self willChangeValueForKey:@"title"];
[title release];
title = @"New title.";
[self didChangeValueForKey:@"title"];
答案 1 :(得分:0)
尝试setNeedsDisplay
?