0

カスタム MkAnnotation をアニメーション化しようとしましたが、iOS 5 ではうまく機能しますが、iOS 6 では機能しません。これが私の didAddAnnotationViews メソッドです。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews
{
    NSTimeInterval delayInterval = 0;

    for (MKAnnotationView *annView in annotationViews)
    {
        // Don't pin drop if annotation is user location
        if ([annView.annotation isKindOfClass:[MKUserLocation class]]) {
            continue;
        }

        // Check if current annotation is inside visible map rect, else go to next one
        MKMapPoint point =  MKMapPointForCoordinate(annView.annotation.coordinate);
        if (!MKMapRectContainsPoint(self.mapView.visibleMapRect, point)) {
            continue;
        }

        CGRect endFrame = annView.frame;

        // Move annotation out of view
        annView.frame = CGRectMake(annView.frame.origin.x, annView.frame.origin.y - self.view.frame.size.height, annView.frame.size.width, annView.frame.size.height);

        [UIView animateWithDuration:1
                          delay:delayInterval
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         annView.frame = endFrame;
                     }
                     completion:^(BOOL finished){
                             if (isModal)
                                 [self.mapView selectAnnotation:[[self.mapView annotations]     objectAtIndex:0] animated:YES];
                         }];

        delayInterval += 0.0625;
    }
}

インターネットで見つけたコードの一部を使用してこのメ​​ソッドを作成しました。iOS 5 ではアニメーションは完璧ですが、iOS 6 ではピンはアニメーションなしで表示されます。mapView デリゲートの設定は、viewDidLoad で最初に行うことであり、viewDidAppear メソッドから注釈を生成しようとしましたが、成功しませんでした。

何か案が ?

ありがとう。

編集: 解決策が見つかりました。私は perform:withObject:afterDelay: メソッドを使用していますが、うまくいくようです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    mapView.delegate = self;
    [self performSelector:@selector(addAnnotation) withObject:nil afterDelay:0.0];
}

- (void)addAnnotation
{
    MapViewAnnotation *annotation = [[MapViewAnnotation alloc] initWithTitle:@"test" andCoordinate:CLLocationCoordinate2DMake(49.6, 6.2)];
    [mapView addAnnotation:annotation];
}
4

1 に答える 1

1

解決策を見つけました。編集セクションを見てください。

于 2013-04-08T08:23:31.113 に答える