我可以创建一个完全透明的 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:
的实现当然不必那么简单。关键是,只要 something 从 hitTest:withEvent:
返回该视图,您甚至可以使完全透明的视图成为可触摸的。
但是请注意,使用hitTest:withEvent:
是一种创建一些非常奇怪的错误的简单方法。谨慎使用此方法。
【讨论】:
是的,使用这种方法可能会有风险。覆盖drawRect:
怎么样?覆盖有很好的记录。它可以由一些自定义标志控制,或者只是调用[super drawRect:...];
以常规方式绘制视图及其所有属性等,或者在@smilingpoplar 发明的不可见但可调整的状态下不做任何事情。
@HermannKlecker 我尝试用空的主体覆盖drawRect:
。子视图仍然显示。【参考方案2】:
更好的方法是设置背景颜色:
UIView *view = ...;
view.backgroundColor = [UIColor clearColor];
为此添加UITapGestureRecognizer
以连接选择器以响应点击。
【讨论】:
但是 UIView 有一些子视图。设置它的 backgroundColor 不能隐藏那些子视图。以上是关于我可以创建一个完全透明的 UIView 来接收触摸吗?的主要内容,如果未能解决你的问题,请参考以下文章
UIView clipToBounds 没有停止子视图接收父视图之外的触摸