我有以下代码在视图控制器中为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];
}
注释掉的过渡动画有效,但不是上面的图层变换。有人可以向我解释原因吗?
基本上,我试图制作动画的图层在最终状态下出现。
谢谢。
答案 0 :(得分:0)
这不是viewDidLoad
的用途。此方法用于在ViewController加载视图层次结构后执行其他设置。调用viewDidLoad
时,屏幕上不会显示该视图,因此您无法看到动画。
尝试将代码移至viewDidAppear:
。
答案 1 :(得分:0)
据我了解,除非你在UIView动画块中,否则在iOS上禁用隐式动画 - 有关更多讨论,请参阅here。
您需要显式开始并提交CATransaction以查看此动画。
我同意另一个答案,它不应该在viewDidLoad中 - 你不能保证视图已经添加到你的窗口,viewDidAppear是一个更好的地方。