2012-01-15 129 views
8

我想我在这里错过了一些简单的东西。我需要创建一个覆盖整个屏幕(包括导航工具栏)的半透明UIImageView。我该怎么做呢?添加覆盖导航栏的UIImageView

这就是我想要做的......

enter image description here

回答

17

这是一个可能的解决方案:

UIImage *image=[UIImage imageNamed:@"whatever.png"]; 
UIImageView *overlay=[[UIImageView alloc] initWithImage:image]; 
overlay.alpha=0.5; 
[[[[UIApplication sharedApplication] delegate] window] addSubview:overlay]; 

编辑:

  • 它是可能的您不会设置叠加层的Alpha值,而是使用嵌入透明度为l的透明PNG evels。不过,这是一种可能性。
  • 不使用ARC时,应该使用[overlay release]
+1

Default.png是一个奇怪的文件的位有点像这样的例子..最后一行是不必要的,addSubview把新的子视图放在所有其他子视图之上。 – 2012-01-15 00:22:43

+0

我还没有试过这个,但我猜测我无法检测到旋转。 – Eric 2012-01-15 00:26:17

+0

@Eric,这段代码不会阻止你检测旋转,也不会对你有所帮助:由你来检测当前的界面/设备旋转,并相应地选择和放置你的覆盖图像。 – magma 2012-01-15 00:30:19

1

为了将上面的答案稍微集中一点,您只需要清楚视图如何剪辑到设备屏幕上他们“拥有”的部分。

关键是在导航视图中,导航栏本身不是您的[myController view]的一部分 - 您的视图控制器的视图是栏下的所有内容,并且您在该视图中执行的任何操作都会剪切到该栏下方的矩形。

但是,酒吧是您的[myAppDelegate window]的一部分。窗口基本上是设备的整个屏幕,而视图是负责管理其特定边界的子部分。所以打电话[[myAppDelegate window] addSubView:]会显示在[[myViewController view] addSubView:]不会的地方。