我试图隐藏一个uiview但仍然让它接收触摸事件。我将alpha设置为0,如下所示:
mainView.alpha = 0.0
我也尝试将此设为真,但它没有做任何事情
mainView.userInteractionEnabled = true
麻烦的是,当我这样做时,它不再接收触摸事件。如何使其能够接收触摸事件但有效隐藏?
答案 0 :(得分:13)
将UIView
backgroundColor
设置为UIColor.clear
。
mainView.backgroundColor = .clear
答案 1 :(得分:1)
有两种方法可以解决这个问题:
硬盘 - 不是在视图上设置alpha,而是在其所有子视图上设置它,并使视图中的所有内容都不可见(例如,将背景更改为清晰颜色)。
简单的一个 - 让另一个视图处理事件。只需添加另一个具有相同位置和大小的透明视图(这很容易使用约束)来处理事件。
顺便说一句,如果您查看用于处理触摸事件的方法hitTest:withEvent:的文档,则表示alpha
低于0.01
的视图将不会接收到触摸。
答案 2 :(得分:1)
隐藏视图的所有子视图,并将backgroundColor设置为UIColor clearColor
答案 3 :(得分:-1)
您在寻找透明视图吗?
只需从UIView创建一个TransparantView
子类并复制到代码下面。该视图将是透明的,但仍然可以接触到。您可能需要更改一些代码,因为我的代码处理其子视图。关键是重写pointInside以实现您的目标。
如果您只想要透明视图,那么此透明视图下的其他视图仍然可以通过透明视图获取触摸事件,您无法在transparentView中添加任何子视图。
扩展阅读是学习响应者链。
@implementation TransparantView
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
return self;
}
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView *view in self.subviews) {
if (!view.hidden && view.alpha > 0 && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event])
return YES;
}
return NO;
}
@end
更新:
似乎iOS在将alpha设置为0时不会将事件分派给视图。但是,透明视图在屏幕上没有任何内容,就像它的alpha = 0一样。我已更新代码以修复错误
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView *view in self.subviews) {
if (!view.hidden && view.alpha > 0 && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event])
return YES;
}
if (!self.hidden && self.alpha >= 0.0 && self.userInteractionEnabled) {
return YES;
} else
return NO;
}
@end