一、position和anchorPoint

1.简单介绍

CALayer有2个非常重要的属性:position和anchorPoint

@property CGPoint position;

用来设置CALayer在父层中的位置

以父层的左上角为原点(0, 0)

@property CGPoint anchorPoint;

称为“定位点”、“锚点”

决定着CALayer身上的哪个点会在position属性所指的位置

以自己的左上角为原点(0, 0)

它的x、y取值范围都是0~1,默认值为(0.5, 0.5)

2.图示

anchorPoint

它的取值为0~1

红色图层的anchorPoint为(0,0)

红色图层的anchorPoint为(0.5,0.5)

红色图层的anchorPoint为(1,1)

红色图层的anchorPoint为(0.5,0)

position和anchorPoint

添加一个红色图层到绿色图层上,红色图层显示到什么位置,由position属性决定

假设红色图层的position是(100,100)

  到底把红色图层的哪个点移动到(100,100)的坐标位置,锚点。

  红色图层的锚点是(0,0)

红色图层的锚点是(0.5,0.5)

红色图层的锚点是(1,1)

红色图层的锚点是(0.5,0)

3.代码示例

(1)没有设置锚点。默认的锚点位置为(0.5,0.5)

  1. 1 //
  2. 2 // YYViewController.m
  3. 3 // 03-锚点等属性
  4. 4 //
  5. 5 // Created by apple on 14-6-21.
  6. 6 // Copyright (c) 2014年 itcase. All rights reserved.
  7. 7 //
  8. 8
  9. 9 #import "YYViewController.h"
  10. 10
  11. 11 @interface YYViewController ()
  12. 12
  13. 13 @end
  14. 14
  15. 15 @implementation YYViewController
  16. 16
  17. 17 - (void)viewDidLoad
  18. 18 {
  19. 19 [super viewDidLoad];
  20. 20 //创建图层
  21. 21 CALayer *layer=[CALayer layer];
  22. 22 //设置图层的属性
  23. 23 layer.backgroundColor=[UIColor redColor].CGColor;
  24. 24 layer.bounds=CGRectMake(0, 0, 100, 100);
  25. 25 //添加图层
  26. 26 [self.view.layer addSublayer:layer];
  27. 27
  28. 28 }
  29. 29
  30. 30 @end

显示效果:

         

(1)设置锚点位置为(0,0)

  1. 1 - (void)viewDidLoad
  2. 2 {
  3. 3 [super viewDidLoad];
  4. 4 //创建图层
  5. 5 CALayer *layer=[CALayer layer];
  6. 6 //设置图层的属性
  7. 7 layer.backgroundColor=[UIColor redColor].CGColor;
  8. 8 layer.bounds=CGRectMake(0, 0, 100, 100);
  9. 9 //设置锚点为(0,0)
  10. 10 layer.anchorPoint=CGPointZero;
  11. 11 //添加图层
  12. 12 [self.view.layer addSublayer:layer];
  13. 13 }
  14. 14 @end

显示效果:

二、隐式动画

1.简单说明

每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根层)

所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画

什么是隐式动画?

当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果

而这些属性称为Animatable Properties(可动画属性)

列举几个常见的Animatable Properties:

bounds:用于设置CALayer的宽度和高度。修改这个属性会产生缩放动画

backgroundColor:用于设置CALayer的背景色。修改这个属性会产生背景色的渐变动画

position:用于设置CALayer的位置。修改这个属性会产生平移动画

2.代码示例

  1. 1 //
  2. 2 // YYViewController.m
  3. 3 // 04-隐式动画
  4. 4 //
  5. 5 // Created by apple on 14-6-21.
  6. 6 // Copyright (c) 2014年 itcase. All rights reserved.
  7. 7 //
  8. 8
  9. 9 #import "YYViewController.h"
  10. 10
  11. 11 @interface YYViewController ()
  12. 12 @property(nonatomic,strong)CALayer *layer;
  13. 13 @end
  14. 14
  15. 15 @implementation YYViewController
  16. 16
  17. 17 - (void)viewDidLoad
  18. 18 {
  19. 19 [super viewDidLoad];
  20. 20 //创建图层
  21. 21 CALayer *mylayer=[CALayer layer];
  22. 22 //设置图层属性
  23. 23 mylayer.backgroundColor=[UIColor brownColor].CGColor;
  24. 24 mylayer.bounds=CGRectMake(0, 0, 150, 100);
  25. 25 //显示位置
  26. 26 mylayer.position=CGPointMake(100, 100);
  27. 27 mylayer.anchorPoint=CGPointZero;
  28. 28 mylayer.cornerRadius=20;
  29. 29 //添加图层
  30. 30 [self.view.layer addSublayer:mylayer];
  31. 31 self.layer=mylayer;
  32. 32 }
  33. 33
  34. 34 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  35. 35 {
  36. 36 //隐式动画
  37. 37 self.layer.bounds=CGRectMake(0, 0, 200, 60);
  38. 38 self.layer.backgroundColor=[UIColor yellowColor].CGColor;
  39. 39 }
  40. 40 @end

效果:

        

关闭隐式动画:

  1. 1 [CATransaction begin];
  2. 2 [CATransaction setDisableActions:YES];
  3. 3 //隐式动画
  4. 4 self.layer.bounds=CGRectMake(0, 0, 200, 60);
  5. 5 self.layer.backgroundColor=[UIColor yellowColor].CGColor;
  6. 6 [CATransaction commit];

3.如何查看CALayer的某个属性是否支持隐式动画?

  可以查看头文件,看有没有Animatable,如果有则表示支持。

也可以查看官方文档

文档中标明的这些属性都是支持隐式动画的

iOS开发UI 篇—CAlayer层的属性的更多相关文章

  1. iOS开发UI篇—CAlayer层的属性

    iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  2. iOS开发UI篇—CAlayer(自定义layer)

    iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...

  3. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  4. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

  5. iOS开发UI篇—CALayer

      一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全 ...

  6. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  7. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  8. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

    iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...

  9. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

随机推荐

  1. String字符串需要掌握的几个问题

    一.两种定义方式的区别: String str = "hello";      先在堆内存中查找是否已经有"hello",若有,将str指向已存在的它即可:若堆 ...

  2. Django Web开发【6】使用Ajax增强用户体验

    Ajax及其优点 Ajax实际上就是指异步Javascript与XML,它包含以下技术: HTML与CSS Javascript XMLHttpRequest XML Ajax技术让客户端与服务器实现 ...

  3. Android 内部存储安装apk文件实现

    目前国内市场的山寨机横行,安卓手机升级也是一天一个样,对于原来老手机可能没有SDCARD,导致我们的APP不能下载资源,无法更新APP,针对这种情况有以下解决方案.通过以下函数判断是否有SD卡再判断下 ...

  4. JS笔记 入门第四

    小测试: 注意:取消所有的设定可以直接使用 document.getElementById("txt").removeAttribute("style"); 这 ...

  5. 《Pointers On C》读书笔记(第一章 快速上手)

    1.C语言是一种自由格式的程序设计语言,没有规则要求我们必须如何书写语句.然而,如果我们在编写程序时能够遵守一些约定还是非常值得的,它可以使代码更加容易阅读和修改.另外,预处理命令有较为严格的规则. ...

  6. ECC(Error Checking and Correction)校验和纠错

    ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法.上一节的BBM中我们提到过,NAND闪 ...

  7. HttpWebRequest使用注意(发生阻塞的解决办法)

    原文 http://www.cnblogs.com/Fooo/archive/2008/10/31/1323400.html HttpWebRequest使用注意(发生阻塞的解决办法) , count ...

  8. IOS开发笔记 IOS如何访问通讯录

    IOS开发笔记  IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...

  9. cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针

    实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a- ...

  10. C++学习笔记29,引用变量(1)

    引用变量在创建的时候就必须初始化.无法创建一个未被初始化的引用. #include <iostream> using namespace std; int main() { int x=1 ...