カスタム 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];
}