UIScrollView 上的 UIView 菜单
Posted
技术标签:
【中文标题】UIScrollView 上的 UIView 菜单【英文标题】:UIView Menu Over UIScrollView 【发布时间】:2012-07-12 09:46:59 【问题描述】:好的,这应该是一个简单的任务,但它让我发疯了。
我想要实现的只是一个 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 可以正常工作,但我无法与叠加层进行交互。
关于处理触摸,我使用 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,并将它们作为子视图添加到视图控制器,这样覆盖就不会占据整个屏幕,但如果有,我想避免这种情况另一种方式。
【问题讨论】:
【参考方案1】:好的.... 看起来这个问题没有一个简单的答案,所以我已经解决了这个问题,正如我在问题中所说的那样,并将每个覆盖添加为 UIView,其 Frame 大小仅为其超级视图大小的一小部分。
这最终效果很好,因为我能够根据它所在的视图检测 touchesBegan 触摸,并且 touchesMoved 和 touchesEnd 保留在该视图中,这让我可以对用户交互进行大量控制。
【讨论】:
以上是关于UIScrollView 上的 UIView 菜单的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer
在 UIScrollview 中的 UIView 上的屏幕中的框架
UIScrollView 内的 UIView 上的 UIButton
如何访问添加到 UIScrollView 的 UIView 上的控件
iPhone UIScrollview:当位于 Scroll View 的子 UIView 上的 480 像素以下时,按钮不响应