簡単な答えは、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;
}
これはかなり良い結果をもたらします。