我可以创建一个完全透明的 UIView 来接收触摸吗?

Posted

技术标签:

【中文标题】我可以创建一个完全透明的 UIView 来接收触摸吗?【英文标题】:Can I create a totally transparent UIView that receives touches? 【发布时间】:2013-06-13 09:01:55 【问题描述】:

我想创建一个完全透明的 UIView 覆盖(并且它有子视图)来接收触摸。我可以将 alpha 设置为较低的值(如 0.02)以获得近似效果。

但我想知道 alpha == 0 UIView 是否可以通过其他 UIView 配置接收触摸?

【问题讨论】:

为什么你不使用 UIButton 与服装风格..? @NitinGohel 我不知道。不确定它是否适合我的问题。 看看你是否想触摸你的 Uivew 的事件,然后它用事件、手势等为它位代码,但使用按钮你可以访问它的 IBAction 并获取点击事件,如果按钮的样式是自定义的,那么也不需要设置 alpha ..使用 UIView 很容易。 【参考方案1】:

您可以通过覆盖完全透明视图类中的hitTest:withEvent: 方法来完成此操作,例如:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
    return self;

hitTest:withEvent: 的实现当然不必那么简单。关键是,只要 somethinghitTest:withEvent: 返回该视图,您甚至可以使完全透明的视图成为可触摸的。

但是请注意,使用hitTest:withEvent: 是一种创建一些非常奇怪的错误的简单方法。谨慎使用此方法。

【讨论】:

是的,使用这种方法可能会有风险。覆盖 drawRect: 怎么样?覆盖有很好的记录。它可以由一些自定义标志控制,或者只是调用[super drawRect:...]; 以常规方式绘制视图及其所有属性等,或者在@smilingpoplar 发明的不可见但可调整的状态下不做任何事情。 @HermannKlecker 我尝试用空的主体覆盖drawRect:。子视图仍然显示。【参考方案2】:

更好的方法是设置背景颜色:

UIView *view = ...;
view.backgroundColor = [UIColor clearColor];

为此添加UITapGestureRecognizer 以连接选择器以响应点击。

【讨论】:

但是 UIView 有一些子视图。设置它的 backgroundColor 不能隐藏那些子视图。

以上是关于我可以创建一个完全透明的 UIView 来接收触摸吗?的主要内容,如果未能解决你的问题,请参考以下文章

UIView clipToBounds 没有停止子视图接收父视图之外的触摸

将触摸事件从 uiview 传输到 uiwebview

如何从嵌入在UIScrollView内部的UiView内嵌的CollectionView接收触摸事件

UIView 内的表格不滚动或接收触摸

在隐藏的 UIView 中接收触摸事件?

动画 UIView 的内容未接收到触摸事件