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

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

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

【问题讨论】:

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

标签: ios objective-c uiview alpha uitouch


【解决方案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 不能隐藏那些子视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-03
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2010-12-11
相关资源
最近更新 更多