2012-07-12 77 views
0

好吧这应该是一个简单的任务,但它一直让我发疯。UIView菜单在UIScrollView

我想要实现的是一个UIScrollView,显示在屏幕的侧面和底部的静态透明工具栏后面。该结构目前已设置为使scrollView(UIScrollView的子类)和overlay(UIView的子类)都是RootViewController的子视图。

​​

问题是,如果我能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]; 
    } 
} 

我有一种感觉,一个修补程序将设置工具栏为独立UIViews并将它们作为子视图添加到视图控制器中,以便覆盖层不占用整个屏幕,但是如果有其他方法,我想避免这种情况。

回答

1

OK ....看起来像这个问题没有一个简单的答案,所以我已经解决了这个问题,正如我在问题中所说的,并将每个叠加的UIView添加为只有帧大小的UIView它的超级视图的大小的一小部分。

这到底是运作良好,因为我能够触动的touchesBegan根据什么认为它是并touchesMoved和touchesEnd保持在该视图这给了我很多在用户交互控制的检测。