1、CALayer

//每一个UIView,都存在一个CALayer.(主层)

//CALayer的功能 描边,圆角,阴影。。。

//CALayer 属于QuartzCore绘图框架

//明明有UIColor,为啥用CGColorRef?CGColorRef属于QuartzCore,可以使用在mac上。

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];

imageView.image = [UIImage imageNamed:@"green"];

imageView.layer.borderColor = [UIColor redColor].CGColor;

imageView.layer.borderWidth  = 2;

NSLog(@"contents - %@",imageView.layer.contents);

//设置圆角

imageView.layer.cornerRadius = 50;

//隐藏圆形以外的部分

imageView.layer.masksToBounds = YES;

//角度换弧度

#define angleToRadian(angle) angle * M_PI / 180

//z = 1 绕着z轴旋转45

imageView.layer.transform = CATransform3DMakeRotation(angleToRadian(45), 0, 0, 1);

//给CALayer添加图片

CALayer * layer = [CALayer layer];

layer.frame = CGRectMake(100, 100, 100, 100);

layer.backgroundColor = [UIColor greenColor].CGColor;

layer.contents = (id)[UIImage imageNamed:@"111"].CGImage;

[self.view.layer addSublayer:layer];

NSLog(@"contents - %@",layer.contents);

//position位置,是以父视图为参考系,默认是center

//anchorPoint锚点:锚点的范围0~1,默认(0.5,0.5)

imageView.layer.anchorPoint = CGPointMake(0 ,0);

imageView.layer.position = CGPointMake(100 , 100);

2、CALayer隐式动画

//什么时候使用CALayer,什么时候使用UIView?

//当视图需要响应时使用UIView,仅作为展示使用CALayer.

//隐式动画只存在于CALayer的子层上

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

_layer.transform = CATransform3DMakeTranslation(arc4random_uniform(100), arc4random_uniform(100), arc4random_uniform(100));

}

3、CABasicAnimation 基础动画

核心动画:QuartzCore / CoreAnimation / CAAnimation

CAAnimation 是一个抽象类,mac,iOS 通用。

动画添加在CALayer上的。

CABasicAnimation 基础动画 -> CAPropertyAnimation 属性动画 -> CAAnimation

CAKeyframeAnimation 关键帧动画->CAPropertyAnimation 属性动画 -> CAAnimation

CAAnimationGroup 动画组

完整路径对照表:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Key-ValueCodingExtensions/Key-ValueCodingExtensions.html

//创建基础动画

CABasicAnimation * basic = [CABasicAnimation animation];

//动画路径

basic.keyPath = @"position";

//设置初始状态

basic.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];

//终止状态

basic.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)];

//动画距离

basic.byValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];

//动画的初始和结束的模式 fillMode和removedOnCompletion要配合使用

basic.fillMode = kCAFillModeForwards;// @"forwards";

//动画完成在layer中删除

basic.removedOnCompletion = NO;

//如果初始状态就是当前动画未执行的位置

//动画时间

basic.duration = 1;

//动画的加速度

basic.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

//animation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.5 :0 :0.9 :0.7];

//添加动画

[_animationView.layer addAnimation:basic forKey:@"basic”];

4、CAKeyframeAnimation关键帧动画

//创建关键帧动画

CAKeyframeAnimation * keyframe = [CAKeyframeAnimation animation];

keyframe.keyPath = @"position.x";

//设置关键帧的位置

keyframe.values = @[@0,@10,@-10,@10,@0];

//设置关键帧的时间

keyframe.keyTimes = @[ @0, @(1 / 6.0), @(3 / 6.0), @(5 / 6.0), @1 ];

//无需设置起始位置

keyframe.additive = YES;

//calculationMode设置加速度,kCAAnimationPaced保持恒定的加速度,如果设置calculationMode,keyTimes失效

keyframe.calculationMode = kCAAnimationPaced;

//设置时间

keyframe.duration = 0.5;

//重复次数

keyframe.repeatCount = HUGE_VALF; //MAXFLOAT;

 

[_animationView.layer addAnimation:keyframe forKey:@"keyframe”];

5、CATransition 转场动画

CATransition * transition = [CATransition animation];

transition.type = @"suckEffect";

transition.subtype = @"fromLeft";

transition.duration = 2;

[self.imageView.layer addAnimation:transition forKey:nil];

6、CAAnimationGroup 动画组

CABasicAnimation * basic1 = [CABasicAnimation animation];

basic1.keyPath = @"transform.scale";

basic1.toValue = @(arc4random_uniform(5));

basic1.duration = 0.5;

basic1.removedOnCompletion = NO;

basic1.fillMode = @"forwards";

[self.animationView.layer addAnimation:basic1 forKey:@"aaa"];

CABasicAnimation * basic2 = [CABasicAnimation animation];

basic2.keyPath = @“tran";

basic2.toValue = @(arc4random_uniform(M_PI));

basic2.duration = 0.5;

basic2.beginTime = 0.5;

[self.animationView.layer addAnimation:basic2 forKey:nil];

CAAnimationGroup * group = [CAAnimationGroup animation];

group.duration = 1;

group.removedOnCompletion = NO;

group.fillMode = @"forwards";

group.animations = @[basic1,basic2];

[self.animationView.layer addAnimation:group forKey:nil];

7、CADisplayLink 定时器

//CADisplayLink,selector每秒钟默认调用60次。

//CADisplayLink和NSTimer区别:CADisplayLink用来做绘图,重绘。NSTimer用于计时,重复调用。

//创建CADisplayLink

self.displaylink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleAction:)];

//调用次数 = 60 / frameInterval

self.displaylink.frameInterval = 3;

//将CADisplayLink放入RunLoop里

[self.displaylink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

 

CALayer 简单操作和实际应用的更多相关文章

  1. x01.MagicCube: 简单操作

    看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...

  2. js简单操作Cookie

    贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...

  3. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

  4. Linq对XML的简单操作

    前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...

  5. Linux 中 Vi 编辑器的简单操作

    Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi  filename //打开或新 ...

  6. python(pymysql)之mysql简单操作

    一.mysql简单介绍 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库 ...

  7. ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作

    问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ...

  8. ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作

    1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其 ...

  9. C#反射技术的简单操作(读取和设置类的属性)

    public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...

随机推荐

  1. LeetCode7:Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to ...

  2. ACM之递推递归

    Hdu 2569 突破蝙蝠的包围,yifenfei来到一处悬崖面前,悬崖彼岸就是前进的方向,好在现在的yifenfei已经学过御剑术,可御剑轻松飞过悬崖. 现在的问题是:悬崖中间飞着很多红,黄,蓝三种 ...

  3. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

  4. commondline 之一 常识

    用法: 执行类执行 jar 文件 java [-options] class [args...]java [-options] -jar jarfile [args...] 常识:javac Some ...

  5. [Oracle]配置path使oracle备份/导入数据命令exp/imp起作用

    将E:\Oracle11g\app\Administrator\product\11.2.0\dbhome_1\bin;路径添加如path

  6. Vmware 虚拟的Linux系统如何与宿主主机共享上网

    学校局域网内的机器是经过一个计费登陆客户端Gmon上网的,我前两天刚用Vmware虚拟了一个Linux      Guest OS 用作测试用,在Vmware的VM>>Settings 里 ...

  7. 从scanf的学习接口设计

    对大多数程序员来说scanf可以能是最熟悉,也是陌生的工具.在学习C语言时,大家一定没少用它,但是对它也知道不多.比如说,它有哪些可能的返回值?又比如怎么样才能跳过回车,读一个字符?我们可以一起来研究 ...

  8. CentOS6 下Vim安装和配置

    1.系统只安装了vim-minimal,执行以下命令安装另外两个组件 yum install vim-common yum install vim-enhanced 2.安装ctags yum ins ...

  9. Hadoop ecosystem

    How did it all start- huge data on the web! Nutch built to crawl this web data Huge data had to save ...

  10. SAE J1850 VPW PWM, SAE J2411 SWC, ISO 11898 CAN, SAE J1708, Chrysler CCD 接口芯片电路

    SAE J1850 VPW 接口芯片电路 SAE J1850 PWM 接口芯片电路 SAE J2411 SWC 接口芯片电路 ISO 11898 CAN 接口芯片电路 CANH 和CANL 上的电容 ...