UIView的显示原理
来源:互联网 发布:js百度地图绘制轨迹 编辑:程序博客网 时间:2024/05/03 04:07
UIView的显示过程:
1当UIView需要显示时,它内部的层会准备好一个CGContextRef(图形上下文),然后调用delegate(这里就是UIView)的drawLayer:inContext:方法,并且传入已经准备好的CGContextRef对象。而UIView在drawLayer:inContext:方法中又会调用自己的drawRect:方法
2平时在drawRect:中通过UIGraphicsGetCurrentContext()获取的就是由层传入的CGContextRef对象,在drawRect:中完成的所有绘图都会填入层的CGContextRef中,然后被拷贝至屏幕
UIView的显示原理:
1既使不导入QuartzCore框架,NSObject和UIView类中的-drawLayer:inContext:方法,也是存在的,只是没有代码提示而已.
2默认情况下,根图层的delegate就是根图层所在的UIView对象,只不过是弱引用.
@property(assign) id delegate;
3当UIView需要显示时,它内部的view.layer图层会准备好一个CGContextRef关联到图层设备,然后调用view.layer.delegate代理(就是view)的(原生的)-drawLayer:inContext:方法.原生的-drawLayer:inContext:方法的内部原理:
1>在-drawLayer:inContext:方法的内部,会把接收到的CGContextRef,保存到UIKit环境中,这一步非常重要
2>在-drawRect:方法的内部,会调用UIGraphicsGetCurrentContext(void)函数 ,这个函数的作用是将先前保存在UIKit环境中的CGContextRef取出来.
3>在-drawLayer:inContext:方法的内部,又调用了UIView对象的-drawRect:方法,在-drawRect:方法的内部使用传过来的CGContextRef进行绘图即可.
经过测试:
1既使不导入QuartzCore框架,重写一个空的-drawLayer:inContext:方法,将导致-drawRect:方法中的代码失效,原因是找不到CGContextRef.
2所以,UIView对象的-drawRect:方法,必须基于NSObject对象的-drawLayer:inContext:方法的存在才有效.
0 0
- UIView的显示原理
- 关于UIView的显示问题
- UIView 的显示过程简析
- UIView 的显示过程简析
- UIMenuController 在UIView 上的 显示
- UIView 会显示超出frame的部分
- Modal方式显示UIView
- PresentModalViewController显示半透明UIView
- UIView显示对话
- UIView显示图片
- #UIView详细显示过程
- irrlicht的显示原理
- UIView 利用CALayer 显示出不同的阴影效果
- 影响一个UIView是否能正常显示的几个因素
- [iOS6]如何在Xcode6设置UIView的圆角显示
- iOS -实现UIView圆角显示的方法
- UIView 的clipsToBound导致气泡阴影显示不正常
- UIView-draggable 可拖拽的UIView
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
- 父类 xx = new 子类()与子类 xx = new 子类()的区别
- 蜗牛—cocos2dx学习之网址
- Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException.
- 华硕x53x不提示进入BIOS,安f2进入
- UIView的显示原理
- 深度优先搜索的用法——求数组部分和
- Linux下安装配置Nginx(Ubuntu)
- UIView+block动画和CALayer动画的区别
- Core Animation简介
- RFKill
- linux实用知识点积累1
- NSURLConnection对象
- 优化的快速排序