UIView alpha = 0会导致触摸事件被传递到下面的视图

10

我创建了一个玻璃窗格或自定义的UIView来处理触摸。这个玻璃窗格位于其他视图(如虚拟UIButtons)的顶部。当我将alpha值设置为0时,实际上触摸事件被底下的视图截获了。这是错误的。然而,当我将alpha值设置为低值,例如0.2时,玻璃窗格就会截获触摸事件。

在界面构建器中进行了alpha设置。

有人知道如何将alpha设置为0并仍然使玻璃窗格截获触摸吗?

2个回答

15

是的,这是标准行为。

例如,您只需设置该UIView的背景透明即可:

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

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


14

是的,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,确保它在前面(在界面构建器中列表的底部),将其类型设置为自定义;不设置图像、背景图像或标题。在界面构建器中,默认情况下您将获得alpha为1和透明颜色。然后可以按照通常的方式连接IBOutlets。


关于不可见按钮的注释很有用。我不知道它应该是没有任何图像的自定义按钮。谢谢! - Kapil Pendse
1
有人知道UIView的alpha为0或hidden=YES时是否仍然会被“绘制”吗?它们对CPU仍然是一种负担吗? - Will Larche
2
嗨,威尔,“使用alpha值需要图形硬件将对象的每个像素与底部的所有内容混合。这是计算密集型的。另一方面,隐藏标志是一个开关。如果你打开它,操作系统知道它根本不必绘制对象。”我从iphonedevsdk.com/forum/iphone-sdk-development/65525-whats-the-difference-between-alpha0-and-hiddenyes.html得到了这个信息,希望它能回答你的问题。 - guoleii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接