2015-06-27 2 views
0

Это очень легко анимировать аннотацию координату на прошивке, используя следующий метод:Как оживить свойство координат аннотации MKAnnotation на OSX?

[UIView animateWithDuration:1.0f 
       animations:^(void){ 
        annotation.coordinate = ... 
       } 
       completion:^(BOOL finished)completion{ 
        NSLog(@"Animation complete"); 
       } 

Однако на OSX эквивалентного методе +[NSAnimationContext runAnimationGroup:] не работает для меня - аннотацию переходит на новое место и сразу же вызывает обработчик завершения, то есть он не последние 10 секунд, как и ожидалось:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 
    context.duration = 10; 

    annotation.coordinate = destination; 
} completionHandler:^{ 
    NSLog(@"Animation complete"); 
}]; 

Я новичок в OSX, поэтому я предполагаю, что я что-то просто здесь, чтобы сделать эту анимацию работы отсутствует. Полагаю, что у меня есть свойство @coordinate не аниматируется в аннотациях OSX MKMapView, но это создало бы действительно странную разницу в реализациях MapKit на iOS и OSX.

Я создал simple test application, чтобы изолировать эту проблему.

ответ

0

Проблема решена. Мне нужно добавить allowsImplicitAnimation = YES к коду:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 
    context.duration = 10; 
    context.allowsImplicitAnimation = YES; 

    annotation.coordinate = destination; 
} completionHandler:^{ 
    NSLog(@"Animation complete"); 
}]; 

Я нашел этот намек на скриншоте от WWDC сессии в теме: Cocoa: run block after animation on OSX.

Смежные вопросы