iOS的UIView和CALayer
来源:互联网 发布:酷狗音乐mac版 编辑:程序博客网 时间:2024/05/20 21:19
iOS的UIView和CALayer
在UIView中有一个layer属性作为根图层,根图层上可以放其他子图层,在UIView中所有能够看到的内容都包含在layer中:
UIView在显示的时候(发生在ViewDidLoad之后)会创建自己的根图层对象,根图层对象会自动创建一个CGContextRef (CALayer 本质使用的是位图上下文),同时调用图层代理(UIView创建图层的同时会设置其代理为自身,所以UIView的它的CALayer对象的代理)的draw: inContext:方法并将图形上下文作为参数传递给这个方法,而在UIView的draw:inContext:方法中会调用其drawRect:方法,在drawRect:方法中使用UIGraphicsGetCurrentContext()方法得到的上下文正是前面创建的上下文。
所以说在使用Quartz 2D在UIView中绘制图形的本质也是绘制到图层中,它的根图层
在CALayer中绘图和在UIView中绘图的区别是前面是绘制到了当前的图层,用UIView绘图是绘制到了根图层中,在子CALayer中绘图的时候需要手动调用setNeedDisplay方法才会绘图
在子CALayer中绘图有两种方法:
1.使用代理方法绘图
通过代理方法进行图层绘图只要指定图层的代理,然后在代理对象中重写-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx方法即可。需要注意这个方法虽然是代理方法但是不用手动实现CALayerDelegate,因为CALayer定义中给NSObject做了分类扩展,所有的NSObject都包含这个方法。另外设置完代理后必须要调用图层的setNeedDisplay方法,否则绘制的内容无法显示。
2.使用自定义图层绘图
在自定义图层中绘图时只要自己编写一个类继承于CALayer然后在drawInContext:中绘图即可。同前面在代理方法绘图一样,要显示图层中绘制的内容也要调用图层的setNeedDisplay方法,否则drawInContext方法将不会调用。
- iOS的UIView和CALayer
- iOS 之CALayer和UIView的关系
- iOS UIView 和 CALayer 的关系
- IOS学习---CALayer 和UIView
- ios开发之UIView和CALayer的关系
- ios开发之UIView和CALayer的关系
- IOS-对UIView、UIWindow、和CALayer的理解
- iOS之有关UIView和CAlayer的区别小结
- UIView和CALayer的区别
- UIView和CALayer的区别
- UIView和CALayer的区别
- UIView和CALayer的区别
- CALayer和UIView的关系
- UIView和CALayer的区别
- UIView和CALayer的区别
- UIView 和 CALayer的比较
- UIView和CALayer的区别
- UIview和CaLayer的区别
- uva 1583 Digit Generator
- IPV6基础知识
- Spring Boot 下配置SpringDataJpa
- 实训周报1-AlexNet论文全解读
- 如何安装配置Redis
- iOS的UIView和CALayer
- [仙人掌直径 单调队列 DP] BZOJ 1023 [SHOI2008]cactus仙人掌图
- mysql
- iOS GPUImage之GPUImageFilterGroup组合滤镜(5)
- C++Primer 第7章笔记整理
- 使用日本人的库QRCode编解码二维码
- java反射
- 利用信鸽推送提示评论通知
- Android 基础之创建一个实用,适用范围广的万能Adapter