我试图找出正确的方法,不断地动画一个层支持的NSView的NSView。
特别是,我基本上是在尝试重新创建新的Launchpad,当你点击并持有一个图标的时候。事件处理不是问题,而是实际的重复动画。
到目前为止,我已经使用NSTimer在视图的动画代理中来回动画frameRotation。虽然这是可行的,但它似乎是资源密集型的,我相信NSAnimation可以用于此。
我只是想知道是否有人能为我指明正确的方向。
编辑:这个文档在这里:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AnimationGuide/Articles/ViewAnimations.html#//apple_ref/doc/uid/TP40003593-DontLinkElementID_7
只讨论视图的帧rect和alpha值。所以我不知道如何在frameRotation中使用这个
你好,亚历克
发布于 2011-09-08 02:02:25
简单的答案是,您不能使用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;}
这个结果很好。
https://stackoverflow.com/questions/7305562
复制相似问题