0

レイヤーバックNSViewのframeRotationを継続的にアニメーション化する正しい方法を見つけようとしています。

特に、私は基本的に、アイコンをクリックして押したままにしたときに新しいLaunchpadがどのようにアニメーション化するかを再現しようとしています。イベント処理は問題ではなく、実際の繰り返しアニメーションです。

これまで、NSTimerを使用して、ビューのアニメータープロキシを使用してframeRotationを前後にアニメーション化してきました。これは機能しますが、リソースを大量に消費するようであり、NSAnimationを使用できると確信しています。

ここで誰かが私を正しい方向に向けることができるかどうか疑問に思っています。

編集:このドキュメントはこちら:http ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AnimationGuide/Articles/ViewAnimations.html#//apple_ref/doc/uid/TP40003593-DontLinkElementID_7

ビューのフレームの四角形とアルファ値についてのみ説明します。したがって、これをframeRotationに使用する方法がわかりません

よろしく、アレック

4

1 に答える 1

2

簡単な答えは、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;

}

これはかなり良い結果をもたらします。

于 2011-09-08T02:02:25.770 に答える