UIVcrollView上的UIView菜单

时间:2012-07-12 09:47:00

标签: ios uiview uiscrollview

好这应该是一项简单的任务,但它让我疯了。

我想要实现的是一个UIScrollView,它将显示在屏幕侧面和底部的静态透明工具栏后面。该结构目前已设置,因此scrollView(UIScrollView的子类)和overlay(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];
    }
}

我有一种感觉,一个修复方法是将工具栏设置为单独的UIViews并将它们作为子视图添加到View Controller中,这样覆盖层不会占用整个屏幕但我想避免这种情况,如果有的话另一种方式。

1 个答案:

答案 0 :(得分:1)

好的....看起来这个问题没有一个简单的答案,所以我已经通过按照我在问题中所说的那样解决这个问题并将每个重叠添加为一个只有一个框架大小的UIView超视图大小的一部分。

这最终运作良好,因为我能够根据它所处的视图检测touchesBegan触摸并触摸移动和触摸并保留在该视图中,这让我对用户交互有很多控制权。