动画 (1) ----- CALayer

CALayer 和 UIView 联系
CALayer的相关属性
CALayer之隐式动画

一. CALayer 和 UIView 联系

  1. 在iOS中,能看得见的基本上都是UIView(比如按钮、图片、文本等),而 UIView之所以能显示在屏幕上,是因为它拥有CALayer对象。

  2. 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

  3. 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

  4. CALayer不能处理用户的触摸事件。所以,如果显示的东西需要交互就选择UIView,不需要的话用 UIView或者CALayer都可以,后者性能会高一些,它少了事件处理的功能,更加轻量级。

二. CALayer的相关属性

宽、高
@property CGRect bounds;

背景颜色(CGColorRef类型)
@property CGColorRef backgroundColor;

边框颜色(CGColorRef类型)
@property CGColorRef borderColor;

边框宽度
@property CGFloat borderWidth;

圆角半径
@property CGColorRef borderColor;

内容(比如设置为图片CGImageRef)
@property(retain) id contents;

位置(默认指中点(0.5,0.5),随anchorPoint变化)
@property CGPoint position;

锚点(x,y的范围都是0-1),决定了position的含义
@property CGPoint anchorPoint;


形变属性
@property CATransform3D transform;

旋转
CATransform3DMakeRotation(M_PI, 1, 0, 0);
平移
CATransform3DMakeTranslation(x,y,z)
缩放
CATransform3DMakeScale(x,y,z);

可以通过KVC的方式进行设置属性.
但是需要将CATransform3DMakeRotation(结构体)转成对象.
🍐:
NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
[_imageView.layer setValue:value forKeyPath:@"transform.scale"];

三. CALayer之隐式动画

  1. UIView内部默认关联着一个CALayer,可称为Root Layer(根层),而所有非Root Layer(手动创建的CALayer),都存在着隐式动画

  2. 隐式动画:
    非Root Layer的部分属性修改时,系统默认会自动产生动画效果,这样的属性(二中的属性)称为Animatable Properties(可动画属性)

  3. 隐式动画关闭(默认是开启)
    可以通过动画事务(CATransaction)关闭默认的隐式动画效果

[CATransaction begin];
[CATransaction setDisableActions:YES];
self.view.layer.position = CGPointMake(15, 15);
[CATransaction commit];

备注

CALayer是在QuartzCore框架中定义的
CGImageRef、CGColorRef两种数据类型在CoreGraphics中定义的
UIColor、UIImage是在UIKit中定义的

其次
QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用
但是UIKit只能在iOS中使用

为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,566评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,141评论 5 13
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 3,155评论 1 23
  • CALayer - 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本...
    Hevin_Chen阅读 1,151评论 0 10
  • 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你...
    被吹落的风阅读 1,592评论 1 2