UIView alpha = 0 导致触摸被拖放到下面的视图

Posted

技术标签:

【中文标题】UIView alpha = 0 导致触摸被拖放到下面的视图【英文标题】:UIView alpha = 0 causes touches to be dropped to the view below 【发布时间】:2011-11-11 07:42:12 【问题描述】:

所以我创建了一个玻璃窗格或一个自定义 UIView 来处理触摸。这个玻璃窗格位于其他视图之上,例如虚拟 UIButton。当我将 alpha 设置为 0 时,触摸实际上会被玻璃视图下方的视图拦截。这是错误的。但是,当我将 alpha 设置为 0.2 之类的低值时,玻璃窗格会拦截触摸。

Alpha 设置是在 Interface Builder 中完成的。

有人知道如何将 alpha 设置为 0 并且仍然让这个玻璃窗格拦截触摸吗?

【问题讨论】:

【参考方案1】:

是的,这是标准行为。

例如,您可以设置UIView的清晰背景:

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

在这种情况下,用户不会看到该视图 - 我假设您想要这样做?

【讨论】:

【参考方案2】:

是的,alpha=0.0f;hidden=YES; 具有相同的效果。这非常有用,因为您可以为淡出设置动画,而不必担心触摸不可见对象 - 即您可以说:

-(void)hideOverlayButton

    [UIView beginAnimations:@"hideOverlayButton" context:nil];
    [UIView setAnimationDuration:0.2];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [self.overlayButton setAlpha:0.0];
    [UIVIew commitAnimations];

然后,当动画完成时,按钮不会响应触摸 - 无需担心停用它。

如果你想要的是不可见的按钮,在视图上放一个 UIButton,确保它在前面(界面生成器中列表的底部),将它的类型设置为自定义;不要设置图像、背景图像或标题。默认情况下,在界面生成器中,您将获得 1 的 alpha 和清晰的颜色。然后您可以按照通常的方式连接 IBOutlets。

【讨论】:

关于隐形按钮的说明很有用。我不知道它应该是没有任何图像的自定义按钮。谢谢! 有谁知道 alpha 为 0 或 hidden=YES 的 UIView 是否仍被“绘制”?它们仍然是 CPU 的开销吗? 嗨,Will,“使用 alpha 值需要图形硬件将对象中的每个像素与下面的所有内容混合。这是计算密集型的。另一方面,隐藏标志是一个开关。如果你打开它,操作系统就知道它根本不需要绘制对象。”我从 iphonedevsdk.com/forum/iphone-sdk-development/65525-whats-the-difference-between-alpha0-and-hiddenyes.html 得到这个,希望它能回答你的问题。

以上是关于UIView alpha = 0 导致触摸被拖放到下面的视图的主要内容,如果未能解决你的问题,请参考以下文章

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

UIView不接受触摸事件的三种情况

将带有 alpha 1 的 UIView 放在带有 alpha 0.5 的 UIView 之上

Swift UIView 在更改 alpha 期间闪烁

UIView锚点->拖动->旋转变换导致闪烁

使用 IF 语句设置 UIView 的位置