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 动画组
//创建基础动画
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 简单操作和实际应用的更多相关文章
- x01.MagicCube: 简单操作
看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...
- js简单操作Cookie
贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...
- GitHub学习心得之 简单操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...
- Linq对XML的简单操作
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- Linux 中 Vi 编辑器的简单操作
Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi filename //打开或新 ...
- python(pymysql)之mysql简单操作
一.mysql简单介绍 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库 ...
- ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作
问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ...
- ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作
1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其 ...
- C#反射技术的简单操作(读取和设置类的属性)
public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...
随机推荐
- Python基础-作用域和命名空间(Scope and Namespace)
在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 ...
- ]用EnumChildWindows遍历窗口的方法
最近项目有需要,得到一个非自己实现的窗口控件对象.于是想起曾经做过类似功能.总结如下: 调用EnumChildWindows(this->m_hWnd, EnumChildProc, NULL) ...
- vtk点云数据的显示[转]
#include "vtkActor.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h& ...
- Setting up Nutch 2.1 with MySQL to handle UTF-8
原文地址: http://nlp.solutions.asia/?p=180 These instructions assume Ubuntu 12.04 and Java 6 or 7 instal ...
- Uva592 Island of Logic
题意:神人鬼三个种族,神只说真话,鬼只说假话,人白天说真话,晚上说假话.根据对话内容区分种族和白天黑夜. 最多有A, B, C, D, E五个人 算法:枚举A, B, C, D, E的种族情况和 ...
- linux命令备忘
yum info softname 查看安装包信息 yum install softname 安装包名 安装 nginx http://jingyan.baidu.com/article/aa6a2c ...
- 【CSS系列-选择器优先级总结】
转:http://www.cnblogs.com/dolphinX/p/3511300.html 容易被忽略CSS特性 CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各 ...
- 模块化JavaScript设计模式(一)
在可扩展JavaScript的世界里,假设我们说一个应用程序是模块化(modular)的,那么通常意味着它是由一系列存储于模块中的高度解耦,不同的功能片段组成. 在可能的情况下.通过一处依赖性.松耦合 ...
- oc-25- @property @synthesize
s.h #import <Foundation/Foundation.h> @interface Student : NSObject { @public NSString *_name; ...
- C#“同步调用”、“异步调用”、“异步回调”
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...