当我们这样做时,我试图找出背景中实际发生的事情(请参见图片)
正如您在图像中看到的,我添加了几个按钮,并从“界面”构建器中检查了窗口的内容视图。
现在我们知道它将使用核心动画或者说会创建图层。 (如果我错了,请纠正我。还在学习......)
我想知道这些按钮是如何绘制的?
我的假设是当我们勾选内容视图时,这些按钮是从CGBitmapContextRef中提取的,并且从它创建的位图被移交给Core Animation(OpenGL)。但到目前为止我无法证明这一点。我该如何证明? 任何一个例子或一些方法的想法都会很棒?
我确定是从CGBitmapContextRef创建的按钮。但是那些按钮图像会发生什么事情是未知的。
任何人都可以解释这种整合怎么可能?这些图像将如何出现在屏幕上?
编辑:
要添加有关同一主题的更多信息,请查看下图中的OpenGL图层。我认为我的目标是常见的OpenGL Framework 层。
答案 0 :(得分:1)
我首先要制作一个可以永久重新绘制按钮的紧凑循环。然后,在它运行时,使用Activity Monitor对您的流程进行示例跟踪。您将看到绘制按钮所需的所有代码路径。您应该能够从绘图堆栈中的例程名称中看到正在发生的事情。如果你无法理解它,请发布相关位,在这里我们可以看看。
答案 1 :(得分:0)
按钮在CGBitmapContextRef上绘制。
让我们说,我们使用
创建了CGBitmapContextRef对象CGContextRef CGBitmapContextCreate (
void *data,
size_t width,
size_t height,
size_t bitsPerComponent,
size_t bytesPerRow,
CGColorSpaceRef colorspace,
CGBitmapInfo bitmapInfo
);
此处void *data
是指向要在其中呈现图形的内存中的目标的指针。
然后可以使用CGContext API对data
执行各种操作。因此可以在上面绘制按钮和背景。
完成后我们可以释放CGContextRef,但数据仍在内存中,可以传递给OpenGLContext(CGLContextObj
)。
我仍然不知道它如何将data
上传到CGLContextObj
。必须使用一些私人api。