CABasicAnimation移动框架由300px左移

时间:2012-03-12 06:36:41

标签: objective-c cocoa animation core-animation

我需要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一样简单? 谢谢!

2 个答案:

答案 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"];