CAlayer学习
2016-03-18 14:27
465 查看
今天开始学习Quartz
Core框架,这个框架其实就是 Core Animation
1. 每个UI控件都有对应的一个Layer,不过这个自带的layer并不会执行隐式动画,只有自己创建的calayer对象才会执行隐式动画
1)UI控件的Layer
下面是对此说法的验证
设置了viewcontroller的自带View的图片,并在3秒以后执行changerLayer方法,改变图片,和位置。
画面是直接变化,没有动画效果
2)自己创建的Layer
@property (nonatomic,strong)CALayer *normalLayer;
- (void)viewDidLoad {
[super viewDidLoad];
_normalLayer = [CALayer layer];
_normalLayer.frame = self.view.frame;
_normalLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search1"].CGImage);
[self performSelector:@selector(changeLayer) withObject:self afterDelay:3];
[self.view.layer addSublayer:_normalLayer];
}
- (void)changeLayer
{
_normalLayer.frame = CGRectMake(20, 20, 300, 300);
_normalLayer.contents = (__bridge id)([UIImage imageNamed:@"search2"].CGImage);
}
思路相同,自定义一个Layer,添加到View的Layer中,3秒后改变layer的frame和图片,可以看到动画效果
2.创建baseAnimation(基本动画)、AnimationGroup(组合动画)
通过设置不同的属性,执行多种动画,并将动画添加到AnimationGroup,再将calayer的动画设置成组合动画
- (void)viewDidLoad {
[super viewDidLoad];
_normalLayer = [CALayer layer];
_normalLayer.frame = self.view.frame;
_normalLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search1"].CGImage);
[self performSelector:@selector(changeLayer) withObject:self afterDelay:1];
[self.view.layer addSublayer:_normalLayer];
}
- (void)changeLayer
{
CABasicAnimation *baseAnimation1 = [CABasicAnimation animationWithKeyPath:@"contents"];
baseAnimation1.fromValue = _normalLayer.contents;
baseAnimation1.toValue = (__bridge id _Nullable)([UIImage imageNamed:@"search2"].CGImage);
baseAnimation1.duration = 10;
CABasicAnimation *baseAnimation2 = [CABasicAnimation animationWithKeyPath:@"frame"];
baseAnimation1.fromValue = [NSValue valueWithCGRect:_normalLayer.frame];
baseAnimation1.toValue = [NSValue valueWithCGRect:CGRectMake(20, 20, 300, 300)];
baseAnimation1.duration = 10;
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = @[baseAnimation1 , baseAnimation2];
animationGroup.duration = 10;
[_normalLayer addAnimation:animationGroup forKey:nil];
}
这样就能实现自定义动画效果,但执行完动画以后,layer又会回到动画开始的样子,想要执行动画以后的效果,要在最后添加动画执行完后的参数
_normalLayer.frame = CGRectMake(20, 20, 300, 300);
_normalLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search2"].CGImage);
想要了解更多CALayer,可以参考下面文档
CALayer--苹果官方文档
Layer层的属性
iOS开发系列--让你的应用“动”起来
Core框架,这个框架其实就是 Core Animation
1. 每个UI控件都有对应的一个Layer,不过这个自带的layer并不会执行隐式动画,只有自己创建的calayer对象才会执行隐式动画
1)UI控件的Layer
下面是对此说法的验证
- (void)viewDidLoad { self.view.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search1"].CGImage); [self performSelector:@selector(changeLayer) withObject:self afterDelay:3]; } - (void)changeLayer { self.view.layer.contents = (__bridge id )[UIImage imageNamed:@"search2"].CGImage; self.view.layer.position = CGPointMake(200, 200); }
设置了viewcontroller的自带View的图片,并在3秒以后执行changerLayer方法,改变图片,和位置。
画面是直接变化,没有动画效果
2)自己创建的Layer
@property (nonatomic,strong)CALayer *normalLayer;
- (void)viewDidLoad {
[super viewDidLoad];
_normalLayer = [CALayer layer];
_normalLayer.frame = self.view.frame;
_normalLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search1"].CGImage);
[self performSelector:@selector(changeLayer) withObject:self afterDelay:3];
[self.view.layer addSublayer:_normalLayer];
}
- (void)changeLayer
{
_normalLayer.frame = CGRectMake(20, 20, 300, 300);
_normalLayer.contents = (__bridge id)([UIImage imageNamed:@"search2"].CGImage);
}
思路相同,自定义一个Layer,添加到View的Layer中,3秒后改变layer的frame和图片,可以看到动画效果
2.创建baseAnimation(基本动画)、AnimationGroup(组合动画)
通过设置不同的属性,执行多种动画,并将动画添加到AnimationGroup,再将calayer的动画设置成组合动画
- (void)viewDidLoad {
[super viewDidLoad];
_normalLayer = [CALayer layer];
_normalLayer.frame = self.view.frame;
_normalLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search1"].CGImage);
[self performSelector:@selector(changeLayer) withObject:self afterDelay:1];
[self.view.layer addSublayer:_normalLayer];
}
- (void)changeLayer
{
CABasicAnimation *baseAnimation1 = [CABasicAnimation animationWithKeyPath:@"contents"];
baseAnimation1.fromValue = _normalLayer.contents;
baseAnimation1.toValue = (__bridge id _Nullable)([UIImage imageNamed:@"search2"].CGImage);
baseAnimation1.duration = 10;
CABasicAnimation *baseAnimation2 = [CABasicAnimation animationWithKeyPath:@"frame"];
baseAnimation1.fromValue = [NSValue valueWithCGRect:_normalLayer.frame];
baseAnimation1.toValue = [NSValue valueWithCGRect:CGRectMake(20, 20, 300, 300)];
baseAnimation1.duration = 10;
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = @[baseAnimation1 , baseAnimation2];
animationGroup.duration = 10;
[_normalLayer addAnimation:animationGroup forKey:nil];
}
这样就能实现自定义动画效果,但执行完动画以后,layer又会回到动画开始的样子,想要执行动画以后的效果,要在最后添加动画执行完后的参数
_normalLayer.frame = CGRectMake(20, 20, 300, 300);
_normalLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"search2"].CGImage);
想要了解更多CALayer,可以参考下面文档
CALayer--苹果官方文档
Layer层的属性
iOS开发系列--让你的应用“动”起来
相关文章推荐
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Java的作业调度类库Quartz基本使用指南
- 最流行的java后台框架spring quartz定时任务
- java定时调度器(Quartz)使用实例
- quartz实现定时功能实例详解(servlet定时器配置方法)
- iOS开发中CAlayer层的属性以及自定义层的方法
- Spring3.2.0和Quartz1.8.6集群配置
- Cron表达式
- JFinal 整合Quartz
- JFinal Quartz 支持配置文件和持久化
- <我的备忘录> quartz在Play中的简单使用
- Quartz 任务调度(一)
- Quartz 任务调度(二)
- spring整合quartz实现定时任务
- quartz的简单实现
- jfinal-quartz 使用jfinal启动quartz执行定时任务
- Quartz定时调度时间配置格式说明与实例
- UIKit框架(17)Quartz2D
- spring任务实时调度的几个方法