修改现有的 MKAnnotationView
Modify existing MKAnnotationView
我有一个带有大量默认 MKAnnotationView
图钉的 MapKit 视图。我想修改一个现有的图钉(即一个已经出现在视图中一段时间,而不是在最初出现时的图钉)。当某个位置的基础数据发生变化时,我想更改它的副标题,并给它一个小动画(抖动或类似的)。
虽然我看到了我的 MKAnnotationView
,但他们似乎没有 superview
。例如:
for (MKAnnotationView *annotationView in self.mapView.annotations) {
if (annotationView.superview) {
NSLog(@"Hooray!");
}
}
虽然我有很多注释(我看到了它们,而且我已经在此处的调试器中看到了它们),none 有一个 superView。
这可行吗?还是我需要为此目的实现自定义视图?
mapView.annotations
是注释数组,而不是注释视图数组。当您尝试在注释上调用 superview
方法时它没有崩溃,我感到有些惊讶。
获取注解视图,是
MKPinAnnotationView *annotationView = (id)[mapView viewForAnnotation:annotation];
if (annotationView) {
// annotation view for this annotation is available
}
不过,我不清楚为什么您需要 superview
作为注释视图。就个人而言,我不愿意在地图视图的内部视图层次结构中乱搞。
如果我想动画化颜色的变化,我可能会这样做:
MKPinAnnotationView *visibleAnnotationView = (id)[mapView viewForAnnotation:annotation];
if (visibleAnnotationView) {
[UIView transitionWithView:visibleAnnotationView duration:0.25 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
visibleAnnotationView.pinTintColor = [UIColor blueColor];
} completion:nil];
}
显然,做任何你想做的动画,但希望这能说明这个想法。
不过请注意,情况实际上比这复杂一点,因为如果用户将注释视图从屏幕上移开然后再打开,您的 MKMapViewDelegate
方法 mapView:viewForAnnotation:
会要知道注释视图的类型 return。所以你可能最终想要一个自定义 MKAnnotation
子类,其中包含你需要的任何状态信息,以便 mapView:viewForAnnotation:
可以相应地采取行动。
我有一个带有大量默认 MKAnnotationView
图钉的 MapKit 视图。我想修改一个现有的图钉(即一个已经出现在视图中一段时间,而不是在最初出现时的图钉)。当某个位置的基础数据发生变化时,我想更改它的副标题,并给它一个小动画(抖动或类似的)。
虽然我看到了我的 MKAnnotationView
,但他们似乎没有 superview
。例如:
for (MKAnnotationView *annotationView in self.mapView.annotations) {
if (annotationView.superview) {
NSLog(@"Hooray!");
}
}
虽然我有很多注释(我看到了它们,而且我已经在此处的调试器中看到了它们),none 有一个 superView。
这可行吗?还是我需要为此目的实现自定义视图?
mapView.annotations
是注释数组,而不是注释视图数组。当您尝试在注释上调用 superview
方法时它没有崩溃,我感到有些惊讶。
获取注解视图,是
MKPinAnnotationView *annotationView = (id)[mapView viewForAnnotation:annotation];
if (annotationView) {
// annotation view for this annotation is available
}
不过,我不清楚为什么您需要 superview
作为注释视图。就个人而言,我不愿意在地图视图的内部视图层次结构中乱搞。
如果我想动画化颜色的变化,我可能会这样做:
MKPinAnnotationView *visibleAnnotationView = (id)[mapView viewForAnnotation:annotation];
if (visibleAnnotationView) {
[UIView transitionWithView:visibleAnnotationView duration:0.25 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
visibleAnnotationView.pinTintColor = [UIColor blueColor];
} completion:nil];
}
显然,做任何你想做的动画,但希望这能说明这个想法。
不过请注意,情况实际上比这复杂一点,因为如果用户将注释视图从屏幕上移开然后再打开,您的 MKMapViewDelegate
方法 mapView:viewForAnnotation:
会要知道注释视图的类型 return。所以你可能最终想要一个自定义 MKAnnotation
子类,其中包含你需要的任何状态信息,以便 mapView:viewForAnnotation:
可以相应地采取行动。