cocoa:cocoa中的哪个方法与animateWithDuration相同:动画:完成:?

时间:2012-08-17 08:52:52

标签: cocoa

我可以在mac os cocoa中使用animator实现动画,比如

[[view animator] setFrame:newFrame];

但我的问题是我必须动画一些属于视图属性的点。我可以像下面的iPhone代码那样做:

[UIView animateWithDuration:0.3 animations:^{
                                for (Point point in self.points) {
                                    point.x += 10;
                                }
                           } completion:^(BOOL finished) {

                                }];
                            }];

我想知道如何在mac ox cocoa中执行此操作?

1 个答案:

答案 0 :(得分:2)

通常对于NSView动画,您必须覆盖动画师使用的标准动画。

CABasicAnimation* animation = [CABasicAnimation animation];
animation.delegate = yourDelegate;
NSDictionary *animations = [NSDictionary dictionaryWithObjectsAndKeys:animation,@"frameSize",nil];
[view setAnimations:animations];

动画的关键是要制作动画的属性。

如果您不需要委托,可以使用此类代码:

[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[[view animator] setFrameOrigin:origin];
[CATransaction commit];

如果您需要更复杂的动画,可以创建一个叠加窗口,其中包含图层托管内容视图,并在其中设置视图屏幕截图的动画层。