ios - 按纬度订购 MKAnnotationViews 数组?

标签 ios nsarray mapkit coordinates mkannotationview

基于一些动态标准,我在 mapkit 中注释各种坐标并按如下方式对其进行动画处理:

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews {

        float delay = 0;
        for (MKAnnotationView *annView in annotationViews) {

            annView.transform = CGAffineTransformMakeScale(0.01, 0.01);
            CLLocationCoordinate2D x = annView.annotation.coordinate;
            float y = x.latitude;
            [UIView animateWithDuration:.2
                                  delay:delay
                 usingSpringWithDamping:damp
                  initialSpringVelocity:vel
                                options:0
                             animations:^{
                                 annView.transform = CGAffineTransformIdentity;
                             } completion:^(BOOL finished) {

                             }];
            delay += .02;
        }
    }

我想做的是在对 annotationView 进行动画处理之前对其进行排序。具体来说,我想访问每个 annotationView 的坐标:

CLLocationCoordinate2D x = annView.annotation.coordinate;

并按纬度排序。最终效果应该是它们从西向东呈波纹状动画。

可以按纬度排序吗?

最佳答案

首先创建一个新的排序 View 数组,然后循环遍历排序数组。

但是如果你想“在从西的涟漪中动画”那么注释应该按经度排序(而不是< em>纬度)。

例子:

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews {

    NSArray *sortedViews = [annotationViews sortedArrayUsingComparator:
        ^NSComparisonResult(MKAnnotationView *obj1, MKAnnotationView *obj2) {
            if (obj1.annotation.coordinate.longitude < obj2.annotation.coordinate.longitude)
                return NSOrderedAscending;
            else
                if (obj1.annotation.coordinate.longitude > obj2.annotation.coordinate.longitude)
                    return NSOrderedDescending;
                else
                    return NSOrderedSame;
        }];


    float delay = 0;
    for (MKAnnotationView *annView in sortedViews) {

        annView.transform = CGAffineTransformMakeScale(0.01, 0.01);

        [UIView animateWithDuration:.2
                              delay:delay
             usingSpringWithDamping:damp
              initialSpringVelocity:vel
                            options:0
                         animations:^{
                             annView.transform = CGAffineTransformIdentity;
                         } completion:^(BOOL finished) {

                         }];
        delay += .02;
    }
}

关于ios - 按纬度订购 MKAnnotationViews 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146768/

相关文章:

ios - NSArray 或 NSMutableArray 的 removeAllObjects 方法是否释放内存?

ios - 如何从数组中读取 NSNumber?

ios - MKOverlay 路线在 Apple Breadcrumb iOS 代码中工作,但在我的应用程序中不起作用

ios - MKMapView _annotationContainer 崩溃

ios-mapkit,带有自定义图像注释的奇怪行为

ios - Firebase 数据库不等于请求 - 替代解决方案(适用于 iOS)

ios - 在 AppDelegate.m 中获取 View Controller 的实例

iphone - NSMutableArrays 没有将它们的对象保存在共享实例中

ios - 编辑时UITextField自定义背景色

Objective-C:以相反顺序对数组进行 block 枚举?