2011-09-11 25 views
1

我正在学习iOS编程。但我有一个问题,这是不透明的。接口生成器上的不透明问题

现在假设。我有两个图像视图。

当我写代码,它的工作原理。代码在这里。

UIImageView *imageView1 = [[UIImageView alloc] initWithImage:@"something1"]; 
UIImageView *imageView2 = [[UIImageView alloc] initWithImage:@"something2"]; 
imageView2.opaque = NO; 
[controller addSubView:imageView1]; 
[controller addSubView:imageView2]; 

现在,imageView2在imageView1上。但imageView2的属性不透明设置为NO。

所以我只能看到imageView1。好。这就是我想要的。

但我想做得更轻松。所以我使用界面生成器。

我有两个图像视图。一个是连接IBOutlet ImageView * imageView1

另一个是IBOutlet ImageView * imageView2。

我设置了imageView2的检查器。并取消选中不透明。

我建立它。所以我认为它与上面的代码具有相同的效果。

但imageView2位于imageView1上。

它不会消失。

这是为什么?

为什么代码可以工作,但界面生成器不是?

+0

我猜测上面的代码并不是你真正的代码,因为你正在用一个字符串初始化图像视图,如果你已经过了那个阶段,那么你会看到imageview 2只是因为它被添加了第二个,所以会imageview顶部1. – jrturton

+0

是的。这不是我真正的代码。是的,这是我的错误。它不是一个字符串。它实际上是图像。谢谢你的评论。 – MoonSoo

回答

2

UIView的不透明属性用于确定视图是否可以优化合成操作。你应该设置alpha属性。

+0

有什么选择?因为imageView2的大小比imageView1大。在这种情况下,如果我在imageView2上设置imageView1,一切都很好。我可以看到imageView1和imageView2两者(当然,我无法看到imageView2的某个区域,因为该区域与imageView1重叠),但是当我有多个imageViews,并且我想添加一个imageView。它比我已经添加的一些图像更大。那么我必须重新排列所有这些? – MoonSoo

+0

如果您正在使用界面构建器在屏幕上同时添加两个图像视图,只需重新排列它们以使图像view2位于图像视图1的后面,在我们上面的代码中,按照1,然后2在界面构建器中,拖动图像视图2以使其位于图像视图1上方。如果您试图在两个图像之间切换,您可以将其中一个设置为隐藏,或者只需将UIImageView添加到“界面”构建器中,然后在需要切换图像时交换其保存的UIImage。如果您试图遮盖底部图像,则需要调查如何遮盖图像。 – cdasher

1

在代码中添加的子视图将按照您调用addSubview的顺序放置在彼此的顶部。要在特定的Z位置添加子视图,请使用insertSubview: atIndex:

在界面构建器中,您必须使用菜单(发送回等)手动控制分层,否则最后添加的视图将处于顶层。

如果您希望视图完全遮蔽下方的视图,则应将opaque设置设置为YES。如果您希望下方的视图显示,请将opaque设置为NO,并根据需要设置alpha(透明度)。

+0

感谢您的回答。但我把不透明设置为NO。并将alpha设置为0.我根本看不到一个图像。我只想隐藏重叠区域。不是所有的图像区域。我可以这样做吗? – MoonSoo