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. Deep Learning 学习笔记——第9章

    总览: 本章所讲的知识点包括>>>> 1.描述卷积操作 2.解释使用卷积的原因 3.描述pooling操作 4.卷积在实践应用中的变化形式 5.卷积如何适应输入数据 6.CNN ...

  2. LIS LCS n^2和nlogn解法 以及LCIS

    首先介绍一下LIS和LCS的DP解法O(N^2) LCS:两个有序序列a和b,求他们公共子序列的最大长度 我们定义一个数组DP[i][j],表示的是a的前i项和b的前j项的最大公共子序列的长度,那么由 ...

  3. UI进阶 地图

    一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如    导航:去任意陌生的地方    周边:找餐馆.找酒店.找银行.找电影院    手机软件:微信摇一摇.QQ附近的人.微博. ...

  4. My集合框架第六弹 左式堆

    左式堆(Leftist Heaps)又称作最左堆.左倾堆.左式堆作为堆的一种,保留了堆的一些属性. 第1,左式堆仍然以二叉树的形式构建: 第2,左式堆的任意结点的值比其子树任意结点值均小(最小堆的特性 ...

  5. POJ 1005(累加)

    /* * POJ_1005.cpp * * Created on: 2013年10月14日 * Author: Administrator */ #include <iostream> # ...

  6. 转载 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一&二)——初识WiX

    转载fromVan Pan 的专栏   http://blog.csdn.net/rryqsh/article/details/8274832 http://blog.csdn.net/rryqsh/ ...

  7. winform 在指定目录下已经生成资源Image图片的方式

    假设在项目目录下存在一个Image目录,注意其中图片已经都设置成为:生成方式为资源文件. /// <summary> /// 得到要绘置的图片对像 /// </summary> ...

  8. PostgreSQL的注释嵌套的例子

    pgsql=# -- Multiline comments pgsql=# SELECT 'Multi' /* This comment extends across pgsql*# * number ...

  9. Java数据结构之线性表(2)

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  10. 让python整型计算结果为浮点型

    这是个入门知识,我记录下. 在python中,默认情况下,如果表达式中全是整型,结果也会仅仅是整型.有时候没注意会出现意想不到的结果,比如: >>> a = 7 >>&g ...