我正在试图找出正确的方法来连续动画图层支持的NSView的frameRotation。
特别是,我基本上试图在您单击并按住图标时重新创建新Launchpad的动画效果。事件处理不是问题,它是实际的重复动画。
到目前为止,我已经使用NSTimer使用视图的动画代理来回动画frameRotation。虽然这有效,但它似乎是资源密集型的,我确信NSAnimation可以用于此。
我只是想知道是否有人可以在这里指出我正确的方向。
仅讨论视图的frame rect和alpha值。所以我不确定如何将它用于frameRotation
亲切的问候, 艾力
答案 0 :(得分:1)
简单的答案是你无法使用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;
}
这得到了相当不错的结果。