我有一个简单的应用程序,当用户在主视图中单击UIButton时,会在主视图上添加子视图。此子视图的大小为480x320(我处于横向模式),但此子视图中的中心图像周围有一个透明的区域。
这就是我的问题所在。我希望只有子视图才能处理触摸,直到从superview中删除,但如果透明边框上有触摸事件,则事件将传递给superview,并忽略子视图,即使子视图是完整大小窗户。
对此进行一些研究,似乎这就是苹果打算发生的事情,因为触摸只会传递给不透明的部分,即使子视图是窗口的完整大小。它在参考文献中有解释:
我希望能够将其设置为使得触摸将保留在子视图中,而不管任何透明度问题。 hitTest:withEvent:方法似乎做了类似的事情,但更多的是将触摸传递给不同的子视图然后触摸了那个。
是否有人可以通过修复/解决方法实现这一目标?
答案 0 :(得分:5)
简单的解决方案是子类化子视图并添加以下空方法...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
}
即使用户要触摸视图的透明部分,这也会阻止触摸传递到超视图。
答案 1 :(得分:2)
你应该在xib的背面放一个清除按钮。这样可以防止触摸事件发生。
答案 2 :(得分:1)
如果您隐藏了子视图的backgroundColor
,您将获得相同的效果(UIButton
周围的透明边框),您的视图将会接触到:
您可以在添加子视图之前执行此代码:
subview.backgroundColor = [UIColor clearColor];
subview.hidden = NO;
[parentView addSubview:subview];