在应用程序首次加载时,如何使用隐式动画为图层设置动画?

时间:2014-03-19 06:31:45

标签: ios objective-c animation

我有以下代码在视图控制器中为viewDidLoad中的图层设置动画。基本上,我希望动画在加载视图时显示。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIView* mainview = self.view;
    CompassLayer* cl = [CompassLayer new];
    cl.frame = CGRectMake(30, 30, 200, 200);
    [cl assembleSublayers];
    [mainview.layer addSublayer:cl];

    CAMediaTimingFunction* clunk = [CAMediaTimingFunction functionWithControlPoints:.9 :.1 :.7 :.9];
    [CATransaction setAnimationDuration:0.8];
    [CATransaction setAnimationTimingFunction:clunk];
    cl.arrow.transform = CATransform3DRotate(cl.arrow.transform, M_PI/4.0, 0, 0, 1);

//    CATransition* t = [CATransition animation];
//    t.type = kCATransitionPush;
//    t.subtype = kCATransitionFromBottom;
//    [cl addAnimation:t forKey:nil];

}

注释掉的过渡动画有效,但不是上面的图层变换。有人可以向我解释原因吗?

基本上,我试图制作动画的图层在最终状态下出现。

谢谢。

2 个答案:

答案 0 :(得分:0)

这不是viewDidLoad的用途。此方法用于在ViewController加载视图层次结构后执行其他设置。调用viewDidLoad时,屏幕上不会显示该视图,因此您无法看到动画。

尝试将代码移至viewDidAppear:

答案 1 :(得分:0)

据我了解,除非你在UIView动画块中,否则在iOS上禁用隐式动画 - 有关更多讨论,请参阅here

您需要显式开始并提交CATransaction以查看此动画。

我同意另一个答案,它不应该在viewDidLoad中 - 你不能保证视图已经添加到你的窗口,viewDidAppear是一个更好的地方。