【发布时间】:2015-08-21 08:31:23
【问题描述】:
我有一个 MKMapView,我向它添加了一些注释。我想在添加一段时间后一一删除注释。我需要每个注释都有自己的生命周期。是否可以?我应该如何做到这一点?
【问题讨论】:
标签: ios objective-c mkmapview mkpointannotation
我有一个 MKMapView,我向它添加了一些注释。我想在添加一段时间后一一删除注释。我需要每个注释都有自己的生命周期。是否可以?我应该如何做到这一点?
【问题讨论】:
标签: ios objective-c mkmapview mkpointannotation
您最好的选择是使用MKMapView 中的-(void)removeAnnotations:(NSArray *)annotations。
只需将您的注释保存在某处,例如带有 {date : annotationObject} 的 NSDictionary,并在您要删除时检索它。
例如:
//Call somewhere to delete after 2 seconds
[self performSelector:@selector(deleteAnnotation:) withObject:annotation afterDelay:2.f]
//this function will remove the annotation from your map
-(void) deleteAnnotation:(id) object{
[self.map removeAnnotations:@[object]];
}
【讨论】:
MKMapView 有 removeAnnotation 和 removeAnnotations 方法,可以删除已添加的注释。
如果您希望每个注释都有自己的生命周期:
创建AnnotationLifespanDelegate协议,其中包含以注解为参数的生命周期指示方法(例如func dearAnnotationRIP(annotation : MKAnnotation))。
使用lifespan 和lifeSpanDelegate 属性和startCountdown 方法创建自定义MKAnnotation。
startCountdown 方法只是启动一个间隔等于lifespan 的计时器,然后调用委托的生命周期结束方法。
在视图控制器中实现AnnotationLifespanDelegate 方法并在创建注释对象时,确保设置lifespan 和delegate,并在将注释添加到注释后立即调用startCountdown 方法地图视图。
在注解生命周期结束方法中,从地图中移除注解。
【讨论】: