2011-04-12 104 views
1

我有一个扩展UIView的类,它有一个UIImageView,当UIView被构造时被添加为子视图。如果我不添加UIImageView,或者如果将其设置为不透明为false,并将BackgroudColor设置为Clear并将图像设置为null(aka nil),则我重写Draw方法(又名drawRect)并在当前CGContext上绘制。一旦我将UIImageView的BackgroundColor设置为真实颜色,或者将UIImageView上的图像设置为非空值,我绘制的所有内容都将绘制在UIImageView的下方。如何让父UIView出现在它的UIImageView子视图

这似乎很奇怪,如果我绘制父应用程序的上下文应该出现在任何子视图上方。然而,看起来堆栈与人们的想法是相反的。看起来人们会认为最高层始终是父级,所有子视图按照添加顺序添加到较低层。这似乎并非如此。

我试着发送子视图到前面和后面,但它没有改变任何东西。

基本上,如果我的父视图不透明是错误的,它的背景颜色是清晰的我期望任何形状或线我画它的绘制方法上下文显示ON可能有任何子视图。

如何在父视图上绘制并在下面显示正在绘制的子视图?

Apple网站上是否有任何文档解释父视图及其子视图的Z顺序?

C#或Objective-C中的例子都很好。

回答

3

您看到的行为是正确的!在UIKit中,一个视图在drawRect中绘制自己,然后该框架处理在其顶部绘制其所有子视图。

由于Apple对z顺序进行了硬编码,所以没有办法改变它。但它确实有道理。例如,如果我有一个背景图像,并且想要添加一个人,我会做[backgroundView addSubview:personView],我期望人物视图将在backgroundView的顶部绘制。

如果你想画在你的形象做你的绘图中有不同的看法,并补充说,在最上面:

[mainView addSubview:myImageView] 
[mainView addSubview:myCustomOverlayView] 
+0

所以你说我不应该对上海华绘制,而是对另一子视图superview和这个其他子视图应添加后,我添加UIImageView?嗯..对我来说似乎是倒退,但苹果有时通常有一个很好的方式。 ;)我会给它一个镜头,让你很快知道好或坏。谢谢。 – 2011-04-12 03:33:39

+0

果然,它像一个魅力,再次感谢信息和帮助。 – 2011-04-12 03:41:35