- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在View and Window Architecture说明,引用:
View 与核心动画层协同工作,以处理 View 内容的渲染和动画。 UIKit 中的每个 View 都由层对象(通常是 CALayer 类的实例)支持,它管理 View 的后备存储并处理与 View 相关的动画。
在“ View 绘制周期”部分的后面说明:
UIView 类使用按需绘制模型来呈现内容。当 View 首次出现在屏幕上时,系统会要求它绘制其内容。 系统捕获此内容的快照并将该快照用作 View 的视觉表示。
这是否意味着,在其 drawRect 方法调用中在 View 中绘制的内容被捕获在保存在其支持核心动画层中的快照中?
如果不是,这个内容快照“驻留在”哪里?
如果不是,那是否意味着 CALayer 用于呈现“静态”内容,即不经常更改的内容,而 drawRect 用于呈现经常更改的内容,例如在游戏应用中?
附:
这些问题与任何特定的代码实现无关。
我只是想了解ios View 层架构。
最佳答案
Does that mean, that the content drawn in a view in its drawRect method call, is captured in a snapshot in saved in its backing core animation layer?
是的。一切都在引擎盖下使用层。 UIView 的 -drawRect
将捕获您绘制的内容并(据我所知)在 View 的子层上设置 content
。它甚至可以在主层对象上执行此操作。这就是保存“快照”的地方。
If not, does that mean that CALayer is used to render "static" content, content that doesn't change very often, and drawRect is used to render content that changes often, for example in a game app?
内容更改的频率并不真正影响选择。使用 drawRect 与手动创建 CALayer
没有太大区别。这取决于您希望如何组织 View 中的子元素,或者您是否希望创建没有 UIView
细节的低级可重用层对象(例如 CATextLayer
) .如果您有各种不同的子元素要绘制,那么您可以使用自己的自定义绘图代码将它们分成不同的层。如果您只有一个简单的内容要绘制,您可以在单个 drawRect
实现中完成所有操作。
话虽如此,您确实需要意识到每一层最终都会成为一个单独的 GPU“元素”,因此减少您拥有的层数或使用 shouldRasterize< 可以带来性能优势
+rasterizationScale
父层的属性。这将拍摄整个图层层次结构的快照,并创建要渲染的单个光栅化图像,而不是 n 个单独的图像。
关于ios - CALayer 和 drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966219/
为了澄清这个问题的目的:我知道如何使用 subview 和使用 drawRect 创建复杂的 View 。我试图完全理解何时以及为什么使用一个而不是另一个。 我也明白提前优化并在进行任何分析之前以更困
我是 Swift 的新手,正在尝试让一个非常简单的应用程序运行。我想要做的就是让 UIView.drawRect 在我按下按钮时更新。它会在应用程序首次加载时更新/绘制,然后无论我尝试什么,它都不会更
我有一个名为 Icon 的基于 UIView 的类。在那里,我想要类似于这样的代码: UIView *finalView = [[UIView alloc] initWithFrame:CGRectM
我正在覆盖 drawRect: 在我的一个 View 中,它甚至在不调用 [super drawrect:rect] 的情况下也能工作。这是如何运作的? - (void)drawRect:(CGRec
我不是很明白CALayer的display和drawInContext与 View 中的drawRect有什么关系。 如果我有一个每 1 秒设置一次 [self.view setNeedsDispla
我在 viewController 上放置了一个 View ,我想在此 View 中绘制一个矩形,但具有自定义高度。我根据 viewController 中的参数确定高度。例如。如果我的参数是 50,
这个非常简单的绘图命令创建了一个 11x11 像素的跟踪红色矩形: _sp.graphics.lineStyle( 1, 0xFF0000, 1, true, LineScaleMode.NORMAL
我每两秒从 NSTimer 函数调用 setNeedsDisplayInRect 一次。这工作得很好,并在随机位置绘制一个具有随机颜色的正方形。然而,在某些情况下,我想在 NSTimer 函数中绘制一
你好,我是新来的,也是 Java 编程的新手。最近我正在尝试在 JPanel 中编写绘图功能。问题是,当我添加新的绘制矩形(只需在 JRadiobutton 中选择绘制矩形,然后拖动空白区域)时,它工
我有一个放在WebView上方的UIView。在这个UIView中,我必须画图,但是应用程序因此错误而崩溃 在LibraryViewController.m中 self.drawView =[[Dr
我正在使用 Java 编写一个文件管理器。我需要将矩形选择添加到我的程序中,就像在 Windows 中一样(以便选择矩形内的多个文件)。我的问题是,每当我向 DrawRect 面板添加布局来放置图标时
我正在使用 UIBezierPath 创建自定义 View 绘画。每当状态根据服务器的响应发生变化时,我想更新自定义 View 填充颜色。我正在使用 fillColor属性作为参数来更新 View 的
我有一个名为 TestView 的 UIView 子类,它重写了 DrawRect ,如下所示: import Foundation import UIKit class TestView: UIVi
我的应用程序中有一个泄漏问题,我正在创建一个颜色的自动释放对象,但通过仪器说问题存在。 Malloc 1 04:12.221.102 32 UIKit +[UIColor allocW
我需要知道是否可以全局覆盖 UI 类的 drawRect。类似于“外观”类属性的东西。本质上,我需要为应用程序中的所有按钮使用我自己的绘图例程。最好我不想继承并且必须在 Storyboard 中的每个
我将绘制一条类似于下图中红色曲线的曲线(可以是贝塞尔曲线或我认为对我的目的最方便的任何曲线)。我想找到曲线上的点(illo 中的蓝点)。这些点很可能是曲线长度的相等部分的划分。 我能找到这些点吗?到目
我有两个 UIView 子类,比如“A 类”和“B 类”。类 A 在其初始化程序中具有代码 [self addSubview:instanceOfClassB];。而在 B 类的 drawRect:
我一直在使用 UITextField 的子类在我的文本字段末尾绘制一个“m3”字符串,但有些东西不起作用。我知道正在调用该方法,因为我已经使用 NSLog 对其进行了测试,我做错了什么? 我的类(cl
我有一个 UITableViewCell 的子类,我正在尝试在 drawRect 中画一条线。 有一个属性separatorColor在子类的标题中: @interface DXDecisionsTa
我将动画代码放在我的 UIView 子类的 drawRect 中。我真的在寻找类似 UIViewController 的 viewWillAppear 的东西。但我想使用 UIView 而不是 UIV
我是一名优秀的程序员,十分优秀!