CALayer 2 详解 -----转自李明杰
CALayer2-创建新的层
- 一、添加一个简单的图层
- 二、添加一个显示图片的图层
- 三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage?
- 四、UIView和CALayer的选择
- 五、UIView和CALayer的其他关系
一、添加一个简单的图层
![](/assets/blank.gif)
1 CALayer *myLayer = [CALayer layer];2 // 设置层的宽度和高度(100x100)3 myLayer.bounds = CGRectMake(0, 0, 100, 100);4 // 设置层的位置5 myLayer.position = CGPointMake(100, 100);6 // 设置层的背景颜色:红色7 myLayer.backgroundColor = [UIColor redColor].CGColor;8 // 设置层的圆角半径为109 myLayer.cornerRadius = 10; 10 11 // 添加myLayer到控制器的view的layer中 12 [self.view.layer addSublayer:myLayer];
![](/assets/blank.gif)
* 第1行创建了一个自动释放的CALayer对象,你也可以使用经典的alloc和init方法来创建
* 第12行将创建好的层添加到控制器的view的层中
二、添加一个显示图片的图层
![](/assets/blank.gif)
1 CALayer *myLayer = [CALayer layer];2 // 设置层的宽度和高度(100x100)3 myLayer.bounds = CGRectMake(0, 0, 100, 100);4 // 设置层的位置5 myLayer.position = CGPointMake(100, 100);6 // 设置需要显示的图片7 myLayer.contents = (id)[UIImage imageNamed:@"lufy.png"].CGImage;8 // 设置层的圆角半径为109 myLayer.cornerRadius = 10; 10 // 如果设置了图片,需要设置这个属性为YES才有圆角效果 11 myLayer.masksToBounds = YES; 12 13 // 添加myLayer到控制器的view的layer中 14 [self.view.layer addSublayer:myLayer];
![](/assets/blank.gif)
* 在第7行设置需要显示的图片,注意,这里用的是UIImage的CGImage属性,是一种CGImageRef类型的数据
三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage?
* 首先要知道:CALayer是定义在QuartzCore框架中的;CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的;UIColor、UIImage是定义在UIKit框架中的
* 其次,QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用,但是UIKit只能在iOS中使用
* 因此,为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef
* 不过很多情况下,可以通过UIKit对象的特定方法,得到CoreGraphics对象,比如UIImage的CGImage方法可以返回一个CGImageRef
四、UIView和CALayer的选择
细心的朋友不难发现,其实前面的2个效果不仅可以通过添加层来实现,还可以通过添加UIView来实现。比如,第1个红色的层可以用一个UIView来实现,第2个显示图片的层可以用一个UIImageView来实现。 既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?
* 其实,对比CALayer,UIView多了一个事件处理的功能。也就是说,CALayer不能处理用户的触摸事件,而UIView可以
* 所以,如果显示出来的东西需要跟用户进行交互的话,用UIView;如果不需要跟用户进行交互,用UIView或者CALayer都可以
* 当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级
五、UIView和CALayer的其他关系
* UIView可以通过subviews属性访问所有的子视图,类似地,CALayer也可以通过sublayers属性访问所有的子层
* UIView可以通过superview属性访问父视图,类似地,CALayer也可以通过superlayer属性访问父层
* 下面再看一张UIView和CALayer的关系图:
如果两个UIView是父子关系,那么它们内部的CALayer也是父子关系。
转载于:https://www.cnblogs.com/ccmy/p/4587809.html
CALayer 2 详解 -----转自李明杰相关推荐
- CALayer 4 详解 -----转自李明杰
CALayer4-自定义层 本文目录 一.自定义层的方法1 二.自定义层的方法2 三.其他 自定义层,其实就是在层上绘图,一共有2种方法,下面详细介绍一下. 回到顶部 一.自定义层的方法1 方法描述: ...
- CALayer 3 详解 -----转自李明杰
CALayer3-层的属性 本文目录 一.隐式动画属性 二.position和anchorPoint 回到顶部 一.隐式动画属性 * 在前面几讲中已经提到,每一个UIView内部都默认关联着一个CAL ...
- CALayer 详解 -----转自李明杰
本文目录 一.什么是CALayer 二.CALayer的简单使用 回到顶部 一.什么是CALayer * 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个 ...
- LLVM框架/LLVM编译流程/Clang前端/LLVM IR/LLVM应用与实践-李明杰-专题视频课程
LLVM框架/LLVM编译流程/Clang前端/LLVM IR/LLVM应用与实践-3人已学习 课程介绍 LLVM并非仅仅是一款编译器这么简单.利用LLVM,我们可以进行各种疯狂的操作 ...
- ios大牛李明杰亲授《从入门到精通Swift编程》限时优惠活动推出!已近600人报名直播课!
课程简介: Swift,是Apple公司于2014年6月发布的全新编程语言,是第一个既满足工业标准又像脚本语言一样充满表现力和趣味的编程语言.从Swift面世那一刻起,就受到了全世界各地开发者的热捧和 ...
- iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-李明杰-专题视频课程...
iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-236人已学习 课程介绍 得遇名师,突飞猛进!iOS培训王者MJ(李明杰)老师精心研发,iOS进阶课程,实用技术 ...
- 各种背包详解(自己总结) 金明的预算和LOL(可依赖的背包问题)
在讲可依赖背包之前先回顾下背包九讲的内容,现在做dp多了发现背包问题真的是dp的鼻祖,好多种问题都是基于背包的模型发展而来,就是不是基于背包的,把背包搞懂也有利于你自己学习dp,以此来想到其它状态转移 ...
- node.js Promise详解(尚硅谷李立超老师视频笔记)
• Promise就是一个用来存储数据对象,但是由于Promise存取的方式的特殊,所以可以直接将异步调用的结果存储到Promise中 Promise存储异步数据: function sum(a,b) ...
- 最新李明杰小码哥ios开发视频教程四期
最新文章
- @HostListener 可接收的事件列表
- [转]侯捷对进入IT行业的年轻人的建议
- python web框架 多线程_python 简单web框架: Bottle
- .propertie文件注释
- cesium坡度坡向分析_综合分析地理空间,科学规划乡村区域
- win7 计算机 打开很慢,Win7电脑网上邻居(网络)打开速度慢的怎么解决?
- python 强类型 弱类型_强类型、弱类型
- 专业网站设计的实施步骤及有关疑难问题汇编
- Java多线程之二(Synchronized)
- shell脚本学习指南-学习(1)
- 小程序源码:酒桌扑克娱乐喝酒小游戏微信小程序源码下载多娱乐功能支持流量主
- Appium原理总结
- the JDBC Driver has been forcibly unregistered;tomcat总是memory leak问题 ,为了防止内存泄漏,jdbc驱动程序已强制取消注册
- 如何判断DNS解析故障?如何解决DNS解析错误?
- 24个关键词致敬科比系列之——凌晨四点
- anime.js的学习小结
- android Wifi热点启动流程,[android]WIFI热点启动流程分析
- [python] 获取股票信息
- python检测微信好友被删被拉黑_如何用Python,查看是否被微信好友删除
- VirtualProtect 3方法 -seh ret-ASLR-dep-Adrenalin Player 2.2.5.3