我需要CABasicAnimation的帮助。我试图将NSView向左移动300像素。我找到了这个SO帖子:How to animate the frame of an layer with CABasicAnimation?
关闭动画框架是不可能的,并且Apple网站上链接到QA的答案之一,但它需要一个通用页面: http://developer.apple.com/library/mac/#qa/qa1620/_index.html
那么,我怎样才能像翻译我的NSView / CALyer一样简单? 谢谢!
答案 0 :(得分:4)
NSView有一个名为NSAnimatablePropertyContainer的协议,它允许您为视图创建基本动画:
NSAnimatablePropertyContainer协议定义了一种添加方式 动画到现有的类,对API的影响最小...... 将符合键值编码的“设置”消息发送到代理将 触发动画以获取其目标的自动动画属性 对象
可以找到NSAnimatablePropertyContainer协议here
我最近使用这种技术来改变框架的原点:
-(void)setOrigin:(NSPoint)aPoint {
[[self animator] setFrameOrigin:aPoint];
}
我没有调用[view setFrameOrigin:],而是创建了另一个名为setOrigin的方法:然后将setFrameOrigin:call应用于视图的动画师。
如果您需要更改动画的持续时间,可以这样做(类似于CATransactions):
-(void)setOrigin:(NSPoint)aPoint {
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setCompletionHandler:^{
...Completion Callback Code goes here...
}];
[[NSAnimationContext currentContext] setDuration:1.0];
[[self animator] setFrameOrigin:aPoint];
[NSAnimationContext endGrouping];
}
NSAnimationContext描述为here
答案 1 :(得分:0)
您可以为center
属性设置动画。例如:
//assuming view is your NSView
CGPoint newCenter = CGPointMake(view.center.x - 300, view.center.y);
CABasicAnimation *animation = [CABasicAnimation animation];
//setup your animation eg. duration/other options
animation.fromValue = [NSValue valueWithCGPoint:v.center];
animation.toValue = [NSValue valueWithCGPoint:newCenter];
[view.layer addAnimation:animation forKey:@"key"];