我有一个扩展UIView的类,它有一个UIImageView,在构建UIView时作为子视图添加。我重写Draw方法(又名drawRect)并在当前CGContext上绘制就好了如果我不添加UIImageView或者如果我将其设置为Opaque为false并将BackgroudColor设置为Clear并将Image设置为null(也就是nil)。一旦我将UIImageView的BackgroundColor设置为真实颜色,或者我将UIImageView上的Image设置为null以外的其他东西,我绘制的所有内容都是在UIImageView下绘制的。
如果我在父级的上下文中绘制应该出现在任何子视图之上,这似乎很奇怪。然而,似乎堆栈正在从人们的想法中颠倒过来。似乎人们会期望最高层始终是父级,所有子视图按照添加顺序添加到较低层。情况似乎并非如此。
我尝试将子视图发送到前面和后面,但它没有改变任何东西。
基本上如果我的父视图Opaque是假的并且它的背景颜色是Clear我会期望我在其绘制方法中绘制的任何形状或线条在其可能具有的任何子视图的顶部显示。
如何在父视图上绘制并在下方显示正在绘制子视图的内容?
Apple网站上是否有任何文档解释了父视图的Z顺序及其子视图?
C#或Objective-C中的示例很好。
答案 0 :(得分:3)
您看到的行为是正确的!在UIKit
中,视图会在drawRect
中绘制,然后框架会处理其上面的所有子视图。
由于Apple对z顺序进行了硬编码,因此没有办法改变这种情况。但它确实有意义。例如,如果我有一个背景图片,并且我想添加一个人,我会[backgroundView addSubview:personView]
,我希望人视图会在backgroundView
之上绘制。
如果您想要绘制图像,请在不同视图中绘制图形并将其添加到顶部:
[mainView addSubview:myImageView]
[mainView addSubview:myCustomOverlayView]