Kha*_*azi 5 core-animation opengl-es calayer viewdidload ios
我正在学习核心动画并尝试示例.
当我使用以下代码时,动画持续时间有效
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//Modifying base layer
self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.view.layer.cornerRadius = 20.0;
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);
//Adding layer
mylayer=[CALayer layer]; //mylayer declared in .h file
mylayer.bounds=CGRectMake(0, 0, 100, 100);
mylayer.position=CGPointMake(100, 100); //In parent coordinate
mylayer.backgroundColor=[UIColor redColor].CGColor;
mylayer.contents=(id) [UIImage imageNamed:@"glasses"].CGImage;
[self.view.layer addSublayer:mylayer];
}
- (IBAction)Animate //Simple UIButton
{
[CATransaction begin];
// change the animation duration to 2 seconds
[CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];
mylayer.position=CGPointMake(200.0,200.0);
mylayer.zPosition=50.0;
mylayer.opacity=0.5;
[CATransaction commit];
}
@end
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我将Animate方法代码集中在ViewDidLoad按钮的底部,以便在不按任何按钮的情况下发生,则不会遵守动画持续时间.我只看到没有任何动画的最终结果.
有什么想法吗?
谢谢九巴
rob*_*off 17
以下是您缺少的信息:您的应用中有两个图层层次结构.还有的模型层的层次结构,你正常工作的.然后是表示层层次结构,它反映了屏幕上的内容.在Core Animation Programming Guide中查看"Layer Trees反映动画状态的不同方面"以获取更多信息,或者(强烈推荐)观看来自WWDC 2011的Core Animation Essentials视频.
您编写的所有代码都在模型层上运行(应该如此).
当系统将更改的可动画属性值从模型层复制到相应的表示层时,系统会添加隐式动画.
只有UIWindow视图层次结构中的模型图层才能获得表示层.系统viewDidLoad在添加self.view到窗口之前发送给您,因此self.view在viewDidLoad运行时没有表示层或您的自定义层.
因此,您需要做的一件事是在将视图和图层添加到窗口并且系统已创建表示层之后,稍后更改属性.该viewDidAppear:是够晚了.
- (void)viewDidLoad {
[super viewDidLoad];
//Modifying base layer
self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.view.layer.cornerRadius = 20.0;
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);
// Adding layer
mylayer = [CALayer layer]; //mylayer declared in .h file
mylayer.bounds = CGRectMake(0, 0, 100, 100);
mylayer.position = CGPointMake(100, 100); //In parent coordinate
mylayer.backgroundColor = [UIColor redColor].CGColor;
mylayer.contents = (id)[UIImage imageNamed:@"glasses"].CGImage;
[self.view.layer addSublayer:mylayer];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[CATransaction begin]; {
[CATransaction setAnimationDuration:2];
mylayer.position=CGPointMake(200.0,200.0);
mylayer.zPosition=50.0;
mylayer.opacity=0.5;
} [CATransaction commit];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9813 次 |
| 最近记录: |