核心动画详细阐述(上)

简介: 核心动画详细阐述

一.系统创建的CALayer


(1) CALayer的简单介绍


  • 1.在iOS中,你能看的见摸得着的东西基本上都是UIView,比如一个按钮,一个文本标签,一个文本输入框,一个图标等等,这些都是UIView,
  • 2.UIView能够显示在屏幕上完全是因为它内部的一个图层
  • 3.在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIViewlayer属性可以访问这个层


@property(nonatomic,readonly,retain) CALayer *layer;
  • 4.当UIView需要显示到屏幕上时,会调用drawRect方法进行绘图,并且会将所有的内容绘制在自己的图层上,绘制完毕后,系统会将图层拷贝到屏幕上,于是进完成了UIView的显示
  • 5.换句话说,UIView本身不具备显示的功能,是它内部才有显示功能


(2).CALayer的基本使用

通过操作CALayer对象,可以方便地调整UIView的一些外观属性,比如:


  • 1.阴影
    Opacity :不透明度(不透明度只要大于1就说明是有阴影的)
  • 2.圆角大小
  • 3.边框宽度和颜色
    ...........
  • 还可以给图层添加动画,来实现一些比较炫酷的动画效果


image.png


简单的代码展示

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.title = @"早起的太阳";
self.navigationController.navigationBar.barTintColor = [UIColor brownColor];
self.navigationController.navigationBar.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName:[UIColor whiteColor]};
self.view.backgroundColor = [UIColor whiteColor];
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
view.center = self.view.center;
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];
/**
 *  使一张图片具有阴影的效果
 */
//1.Opacity :不透明度(不透明度只要大于1就说明是有阴影的)
view.layer.shadowOpacity = 1;
//2.阴影的偏移 CGSizeMake(X[正的右偏移,负的左偏移], Y[正的下偏移,负的上偏移]);
//view.layer.shadowOffset = CGSizeMake(10, -10);
//3.设置阴影部分的面积颜色
view.layer.shadowColor = [UIColor yellowColor].CGColor;
//4.阴影的圆角
view.layer.shadowRadius = 20;
//5.view的圆角
view.layer.cornerRadius = 50;
//6.view的边宽
view.layer.borderWidth = 1;
//7.view的边颜色
view.layer.borderColor = [UIColor whiteColor].CGColor;    
}


(3)CALayer的图形旋转与缩放:都以layer图层操作为例(下面以一个button为例)


image.png

主要阐述两点:旋转和缩放两种方法


image.png



  • <1>旋转(这两种方式一样)(建议不要使用KVC快速缩放或者旋转)
    1.旋转
    //button.layer.transform = CATransform3DMakeRotation(M_PI, 1, 0.5, 1);
    2.旋转
    [button.layer setValue:@M_PI forKeyPath:@"transform.rotation"];
  • <2>缩放(两种方式一样)
    1.快速进行图层缩放


//button.layer.transform = CATransform3DMakeScale(0.5, 0.5, 1);
  • 2.缩放
    [button.layer setValue:@0.5 forKeyPath:@"transform.scale"];

上面的内容代码密码: 7u95


二.自己创建的CALayer层


image.png

1.创建图层

CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(WIDTH/2-100, 200, 200, 200);
layer.backgroundColor = [UIColor brownColor].CGColor;

2.图层只能添加到图层上面

[self.view.layer addSublayer:layer];

3.给图层添加图片

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


问题:为什么CALayer图层的颜色后面要加.CGColor而图片加.CGImage

解释如下:

首先:

(1) CALayer 是定义在QuartzCore框架中的
 (2) CGImageRef , CGColorRef  两种数据类型是定义在CoreGraphics中的
 (3) UIColor , UIImage 是定义在UIKit 框架中

其次:

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


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


三.UIView与CALayer的选择

image.png


CALayer继承于NSObject


image.png

UIView继承于UIResponder(具有响应事件的能力)


  • (1) 通过CALayer,就能做出跟UIImageView 一样的界面效果
  • (2) 既然CALayerUIView 都能实现相同的显示效果,那如何选择???
    解释: 对比CALayer ,UIView 多了一个事件处理的功能,也就是说,CALayer 不能处理用户的触摸事件,而UIView可以,所以:如果显示出来的东西需要跟用户进行交互的话,用UIView:如果不需要跟用户进行交互的话,就用UIVIew或者CALayer都可以,当然,CALayer 的性能会高一些,因为它多了处理事件的功能,更加轻量级.


**四.介绍一下CALayer的两个重要属性position 和 anchorPoint **


  • @property CGPoint position; 用来设置CALayer 在父层中的位置,以父层的左上角为原点(0,0):类似frame
  • @property CGPoint anchorPoint; 称为"定位点","锚点",决定着CALayer 身上的哪个点会在position 属性所指的位置,以自己的左上角为原点(0,0),它的x,y取值范围都是0~1,默认值为(0.5,0.5):类似bounds


只有图层才有anchorPoint这个属性


image.png

具体的显示(锚点默认在中心=center) 在旋转时:锚点也就是旋转的点


image.png

目录
相关文章
|
API Android开发
Android动画基础详析 | 属性动画基础及ValueAnimator
Android动画基础详析 | 属性动画基础及ValueAnimator
|
API 数据安全/隐私保护 iOS开发
核心动画详细阐述(下)
核心动画详细阐述(下)
159 0
核心动画详细阐述(下)
|
iOS开发
UIWindow的讲述以及底层
UIWindow的讲述以及底层
138 0
UIWindow的讲述以及底层
|
iOS开发
iOS动画开发之四——核心动画编程(CoreAnimation)
iOS动画开发之四——核心动画编程(CoreAnimation)
181 0
iOS动画开发之四——核心动画编程(CoreAnimation)
|
iOS开发
iOS开发CoreAnimation解读之二——对CALayer的分析(二)
iOS开发CoreAnimation解读之二——对CALayer的分析
211 0
iOS开发CoreAnimation解读之二——对CALayer的分析(二)
|
iOS开发 容器
iOS开发CoreAnimation解读之二——对CALayer的分析(一)
iOS开发CoreAnimation解读之二——对CALayer的分析
142 0
iOS开发CoreAnimation解读之二——对CALayer的分析(一)
|
存储 iOS开发 计算机视觉
iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程
iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程
176 0
iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程
|
iOS开发
iOS动画开发之五——炫酷的粒子效果(二)
iOS动画开发之五——炫酷的粒子效果
336 0
iOS动画开发之五——炫酷的粒子效果(二)
|
iOS开发
iOS动画开发之二——UIView动画执行的另一种方式
iOS动画开发之二——UIView动画执行的另一种方式
123 0
|
iOS开发
iOS动画开发之五——炫酷的粒子效果(一)
iOS动画开发之五——炫酷的粒子效果
377 0