好的,这应该是一个简单的任务,但它一直让我发疯。
我想要实现的只是一个 UIScrollView 显示在屏幕侧面和底部的静态透明工具栏后面。该结构当前设置为滚动视图(UIScrollView 的子类)和叠加层(UIView 的子类)都是 RootViewController 的子视图。
scrollView = [[EMDrawScrollView alloc]initWithFrame:CGRectMake(0, 0, winSize.width, winSize.height)];
scrollView.userInteractionEnabled = YES;
[self.view addSubview:scrollView];
overlay = [[EMDrawOverlayView alloc]initWithFrame:CGRectMake(0, 0, winSize.width, winSize.height)];
overlay.userInteractionEnabled = NO;
[self.view addSubview:overlay];
问题是如果我启用overlay.userInteractionEnabled,所有的触摸都会进入图层并且无法进入scrollView。但是,如果我关闭用户交互,scrollView 可以正常工作,但我无法与叠加层进行交互。
关于处理触摸,我使用 RootViewController 收集它们并将它们发送到正确的对象,如下所示:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *t1 = [[[event allTouches]allObjects]objectAtIndex:0];
CGPoint loc = [t1 locationInView:self.view];
if (CGRectContainsPoint(overlay.rightToolbar.frame, loc)) {
overlayTouched = YES;
[overlay touchesBegan:touches withEvent:event];
} else {
overlayTouched = NO;
[scrollView touchesBegan:touches withEvent:event];
}
}
我有一种感觉,一个解决方法是将工具栏设置为单独的 UIView,并将它们作为子视图添加到视图控制器,这样覆盖就不会占据整个屏幕,但如果有另一种方法,我想避免这种情况。