UIView'落下雨'透明覆盖层可以点击吗?

时间:2013-03-12 11:15:53

标签: ios objective-c uiview

我想创建一个UIView,它会在最前面,但在透明的情况下,应该是落在所有其他视图上方的降雨,并且根本不应该注册水龙头或互动,所以在我实现它之前,点击它背后的UI应该与现在完全一样。它只是一个叠加层,仅此而已。

这就像将UserInteractionEnabled设置为NO一样简单,还是有更多内容?我是否需要继承UIView,或覆盖某些内容等?

2 个答案:

答案 0 :(得分:2)

是的,设置userInteractionEnabled = NO;不需要子类UIView。 e.g:

UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
overlay.backgroundColor = [UIColor colorWithWhite:0 alpha:.5];
[self.view addSubview:overlay];

答案 1 :(得分:0)

你可以在添加透明子视图后使用hittest,如@zenith所解释的那样。

在UIResponder中执行hitTest:withEvent:执行以下操作:

它调用pointInside:withEvent:of self

如果返回NO,则hitTest:withEvent:返回nil。故事的结尾。

如果返回YES,则将hitTest:withEvent:消息发送到其子视图。它从顶级子视图开始,并继续到其他视图,直到子视图返回非零对象,或者所有子视图都接收到该消息。

如果子视图第一次返回非nil对象,则第一个hitTest:withEvent:返回该对象。故事的结尾。

如果没有子视图返回非nil对象,则第一个hitTest:withEvent:返回self 此过程以递归方式重复,因此通常最终返回视图层次结构的叶视图。

但是,您可以覆盖hitTest:withEvent以执行不同的操作。在许多情况下,重写pointInside:withEvent:更简单,并且仍然提供了足够的选项来调整应用程序中的事件处理。