Использование NSViewAnimation для непрерывной анимации frameRotation - PullRequest
0 голосов
/ 05 сентября 2011

Я пытаюсь выяснить правильный способ непрерывной анимации frameRotation с поддержкой слоя с NSView.

В частности, я в основном пытаюсь воссоздать, какновая панель запуска анимируется при нажатии и удерживании значка.Обработка событий не проблема, это фактическая повторяющаяся анимация.

До сих пор я использовал NSTimer для анимации frameRotation вперед и назад, используя прокси-сервер аниматора представления.Хотя это работает, оно кажется ресурсоемким, и я уверен, что для этого можно использовать NSAnimation.

Мне просто интересно, может ли кто-нибудь указать мне правильное направление здесь.

РЕДАКТИРОВАТЬ: Этот документ здесь: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AnimationGuide/Articles/ViewAnimations.html#//apple_ref/doc/uid/TP40003593-DontLinkElementID_7

обсуждает только прямоугольник и альфа-значение кадра представления.Так что я не уверен, как использовать это для frameRotation

С уважением, Алек

1 Ответ

1 голос
/ 08 сентября 2011

Простой ответ: вы не можете с NSViewAnimation, но вы можете с CABasicAnimation.

Вот что я придумал:

Добавьте эту анимацию на слой вида:

- (CABasicAnimation *)rockingAnimation {

float diff = 0.065 - .055;
float startValue = (((float) (arc4random() % ((unsigned)RAND_MAX + 1)) / RAND_MAX) * diff) + 0.055;
float endValue = (((float) (arc4random() % ((unsigned)RAND_MAX + 1)) / RAND_MAX) * diff) - 0.055;
float duration = (((float) (arc4random() % ((unsigned)RAND_MAX + 1)) / RAND_MAX) * diff) + 0.085;

CABasicAnimation *rockAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
[rockAnimation setFromValue:[NSNumber numberWithFloat:startValue]];
[rockAnimation setToValue:[NSNumber numberWithFloat:endValue]];
[rockAnimation setDuration:duration];
[rockAnimation setRemovedOnCompletion:YES];
[rockAnimation setFillMode:kCAFillModeForwards];
[rockAnimation setAutoreverses:YES];
[rockAnimation setRepeatCount:10000];

return rockAnimation;

}

Получается довольно хороший результат.

...