首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSViewAnimation连续动画frameRotation

使用NSViewAnimation连续动画frameRotation
EN

Stack Overflow用户
提问于 2011-09-05 08:28:56
回答 1查看 685关注 0票数 0

我试图找出正确的方法,不断地动画一个层支持的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中使用这个

你好,亚历克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-08 02:02:25

简单的答案是,您不能使用NSViewAnimation,但可以使用CABasicAnimation。

以下是我想出的:

将此动画添加到视图的层:

代码语言:javascript
复制
- (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;

}

这个结果很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7305562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档