可以穿透点击的UIView“下雨”透明叠层?

3
我想创建一个UIView,它将动画下落的雨,应该在所有其他视图的前面,非常透明,不能响应触摸或交互,因此在其后面敲击UI应该与实现之前完全相同。它将作为覆盖层,仅此而已。
这是否就像设置UserInteractionEnabled为NO那样简单,或者还有更多内容?我需要子类化UIView,还是覆盖某些东西等等?
2个回答

2

是的,设置userInteractionEnabled = NO;无需子类化UIView。例如:

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

那么它不会简单地忽略视图上的轻击,而是将它们传递到该位置下方的任何控件? - Luke
试一下,应该没问题 :) - dsgriffin
还没有开始做,但我会随时通知你的 ;) - Luke

0

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

UIResponder中hitTest:withEvent:的实现如下:

它调用self的pointInside:withEvent:

如果返回值为NO,则hitTest:withEvent:返回nil。故事结束。

如果返回值为YES,则向其子视图发送hitTest:withEvent:消息。它从顶层子视图开始,并继续到其他视图,直到子视图返回非nil对象或所有子视图接收到该消息。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接