Pro*_*ber 7 iphone cocoa-touch uiview ipad ios
来自文档:
"图层是轻量级对象(CALayer),虽然与视图类似,但实际上是分配给视图的模型对象."
轻量级对我来说排除了任何重要的内容位图.我相信CALayer是"真正的"东西,而UIView只是它的包装.每个视图在不同的树(模型,演示文稿,渲染)中有3个CALayers.那么没有3个位图?只有一个?
Bra*_*son 17
关于CALayer的术语"轻量级"来自于源自Mac的那篇文档.正如Joe指出的那样,与iPhone的UIView相比,NSView是一个相当复杂的UI元素.您甚至可以在资源受限的移动设备上围绕屏幕动画显示数十个UIViews,但是当您开始将多个UIView添加到屏幕上时,NSView会给系统带来更大的压力.这是UIKit在AppKit上重新开始所获得的东西之一,因为UIKit从一开始就拥有Core Animation,而Apple有机会学习AppKit中哪些有效,哪些无效.
相比之下,CALayer很少添加它正在绘制的基于GPU的位图矩形纹理,因此它们不会增加很多开销.在iPhone上,这与UIView没有什么不同,因为UIView只是一个围绕CALayer的轻量级包装器.
我将不同意Count Chocula,并说CALayer似乎确实在GPU上包裹了一个位图纹理.是的,您可以指定自定义Quartz绘图来组成图层的内容,但该绘图仅在必要时进行.一旦绘制了图层中的内容,就不需要重新绘制要移动的图层或以其他方式设置动画.如果将变换应用于图层,则会在放大时看到它变为像素化,这表示它不处理矢量图形.
此外,使用Core Plot框架(以及我自己的应用程序),我们不得不覆盖CALayers的正常绘制过程,因为正常的-renderInContext:方法对PDF不起作用.如果使用此方法将图层及其子图层渲染为PDF,您会发现最终PDF中的图层由栅格位图表示,而不是它们应该是的矢量元素.只有使用不同的渲染路径,我们才能为PDF获得正确的输出.
我还没有使用iOS 3.2中的新属性shouldRasterize和rasterizationScale属性来查看它们是否改变了它的处理方式.
事实上,当你考虑到位图内容时,你会发现CALayers(以及带有支持层的UIViews)会消耗大量内存."轻量级"衡量标准是它们在内容之上添加了多少,这是非常少的.您可能无法从对象分配等工具中看到内存使用情况,但在向应用程序添加大型图层时会查看内存监视器,并且您将看到应用程序或SpringBoard(拥有Core Animation服务器)中的内存峰值.
当涉及表示层与模型层时,位图之间不会重复.在给定时刻应该只有一个位图纹理显示在屏幕上.不同的层仅在任何给定时刻跟踪属性和动画,因此每个层中存储的信息非常少.
| 归档时间: |
|
| 查看次数: |
2662 次 |
| 最近记录: |