iphone - MKMapView,animateDrop?

标签 iphone objective-c cocoa-touch

我已经设置了一个从符合 MKAnnotation 协议(protocol)的类派生的对象的 NSMutableArray。我已经为注释设置了设置标题和副标题,并使用以下方法将它们成功添加到 MKMapView:

[[self customMapView] addAnnotations:locationArray];

我现在想做的是制作别针掉落的动画,最初我认为我可以使用 Option1 来做到这一点,使用它一切正常,但别针不会做动画下降。

// Option1
// WORKS FOR: pinColor YES, animatesDrop NO, LABEL YES
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    for(MKPinAnnotationView *eachView in views) {
        [eachView setAnimatesDrop:YES];
        [eachView setPinColor:MKPinAnnotationColorPurple];
    }
}

我的下一个猜测是尝试Option2,这似乎工作得很好,但我有两个问题。标题和副标题没有显示,我的自定义注释对象正在传入(我可以在调试器中看到它)但是包含的信息没有传递到新的 pin。其次,这会创建一组新的 MKAnnotationView,旧的会发生什么,是否存在内存泄漏问题?

// Option2
//FOR: pinColor YES, animatesDrop YES, LABEL NO
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation {
    MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier: @"annotation_ID"];
    if (pin == nil) {
        pin = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"annotation_ID"] autorelease];
    } else {
        pin.annotation = annotation;
    }
    pin.pinColor = MKPinAnnotationColorRed;
    pin.animatesDrop = YES;
    return pin;
}

编辑:我通过添加 pin.canShowCallout = YES;

解决了缺少的标题和副标题

最佳答案

MKPinAnnotationView 是 MKAnnotationView 的子类。

MKAnnotationView 是一个通用的注释 View ,如果需要,您必须为其提供图像和动画。

MKPinAnnotationView 是 MKAnnotationView 的一个方便的子类,它自动提供选定颜色的图钉图像和图钉落在 map 上的动画。在 viewForAnnotation 中创建 View 时设置 animatesDrop 属性,它会自动处理动画。

如果您没有实现 viewForAnnotation,则会显示没有动画的标准红色图钉。

在调用 didAddAnnotationViews 时,自动动画已经发生并且设置该属性没有任何效果。

但是,如果您想创建一个不同于 MKPinAnnotationView 提供的默认放置动画的自定义动画,您可以在 didAddAnnotationViews 中执行此操作。 View 将已经位于其最终目的地点,因此您可以保存它,然后将其从不同的点动画化到该目的地。

如果您对 MKPinAnnotationView 提供的默认放置动画感到满意,则无需实现 didAddAnnotationViews。当所有注释 View 实际就位时,该委托(delegate)方法对于执行您可能需要执行的其他操作更有用。

为了让您的图钉显示标题,请将 canShowCallout 设置为 YES,其中您设置了 animatesDrop

不确定“这会创建一组新的 MKAnnotationViews”是什么意思。在 viewForAnnotation 方法中,您为 MKAnnotation 对象提供了一个 View (MKPinAnnotationView)。它们不是同一件事。

此外,viewForAnnotation 方法的工作方式类似于 UITableView 的 cellForRowAtIndexPath 方法,其中注解 views 可以被回收,这就是每次在 View 中设置 MKAnnotation 特定信息(例如注解属性)很重要的原因).

关于iphone - MKMapView,animateDrop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713821/

相关文章:

iPhone:设置所需的滑动手势长度

用于检查电话号码的 Objective-c 正则表达式

iOS8 检查设备是否有 Touch ID

iphone - 使用 touchesMoved 沿偏移向量/增量拖动对象?

ios - iOS 7 上的 UIVibrancyEffect

objective-c - 管理 iDevices 上的文件

iphone - 使用 VBA 和 CDO 邮件对象通过 SMS 将向上箭头 `↑` 字符发送到 iPhone

iphone - 从图像和音频创建视频文件(预录)

iphone - llvm-gcc-4.2 : error

objective-c - 如何在 Objective-C 中获取实例变量的名称?