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. Cisco 防止SYN Flood 攻击原理

    DoS(Denial of Service拒绝服务)和DDoS(Distributed Denial of Service分布式拒绝服务)攻击是大型网站和网络服务器的安全威胁之一.2000年2月,Ya ...

  2. Mes首检确认统计的存储过程

    USE [ChiefmesNEW]GO/****** Object: StoredProcedure [dbo].[st_MES_RptInspectFirstCollect] Script Date ...

  3. Flex 拾色器改变背景

    package {  import flash.display.*; import flash.geom.*; import flash.utils.*;  import mx.core.EdgeMe ...

  4. js 数组去重 的5种方法

    一万数组,4个重复项,先贴上成绩. 1.3毫秒 2.115毫秒 3.71毫秒 4.6毫秒 1.哈希表 2.JQuery (最快的方法是用JQuery 这句话是截图带的... 实际上Jq是最慢的) 3. ...

  5. FluentData官方文档翻译

    开始 要求 .NET 4.0. 支持的数据库 MS SQL Server using the native .NET driver. MS SQL Azure using the native .NE ...

  6. xiaoxia的vim配置

    这样已经很强大了 set nu sts=4 ts=4 sw=4 et si ai set ruler set hlsearch syntax on filetype plugin on

  7. 从客户端(&)中检测到有潜在危险的 Request.Path 值解决方案

    出这个问题基本上是在转址字符串中有非法字符“<”,'&'之类的. 方案1: 如果仅仅只是转换页面,传参时出现的问题,可对数据加密: 绑定数据传值时加密 <%#Server.UrlE ...

  8. AIM Tech Round (Div. 2) B. Making a String 贪心

    B. Making a String 题目连接: http://codeforces.com/contest/624/problem/B Description You are given an al ...

  9. 【ArcGIS 10.2新特性】Portal for ArcGIS新特性

    1.概述 经过各版本的积累和更新,Portal for ArcGIS在ArcGIS10.2中以正式产品的形态加入到了ArcGIS系列产品线中.它有3个主要定位:协同管理平台.在线制图平台以及内容管理平 ...

  10. [AngularJS] Adding custom methods to angular.module

    There are situations where you might want to add additional methods toangular.module. This is easy t ...