UIScrollView里面的UIScrollView

Ana*_*sia 28 cocoa-touch uiscrollview uikit ipad ios

UIScrollView和另一个UIScrollView里面有一个.它们都是水平滚动的pagingEnabled = YES.假设我开始滚动内部滚动视图并达到最右边界限.如果我继续滚动它,那么外部scrollView开始移动.我需要避免这种情况.内视图应该带有橡皮筋效果,外部应该留在它的位置.

希望它很清楚,但这是一个草图: 在此输入图像描述

我试着outerView.scrollEnabled = NO;像这样设置:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    outerView.scrollEnabled = NO;
}
Run Code Online (Sandbox Code Playgroud)

如果只在innerView中滚动它,它正是我需要的.OuterView不再滚动.但是scrollEnabled如果我想要再次滚动outerView,我必须在某处重新设置YES.我试过这里做的:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    outerView.scrollEnabled = YES;
}
Run Code Online (Sandbox Code Playgroud)

,但是我得到了同样的问题:在达到内部视图外部滚动的最右边界之后,而不是使用橡皮筋效果的内部跳跃.

有什么建议如何解决问题?

Ana*_*sia 18

UPDATE

此解决方案始终有效:

@implementation InnerScrollViewController <UIScrollViewDelegate, UIGestureRecognizerDelegate>

- (void)viewDidLoad
{
    UISwipeGestureRecognizer*   swipeGesture = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)] autorelease];
    swipeGesture.delegate = self;
    [self.view addGestureRecognizer:swipeGesture];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    _outerScrollView.scrollEnabled = NO;
    return YES;
}

- (void)handleSwipe:(UIGestureRecognizer*)gestureRecognizer
{

}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{   
    _outerScrollView.scrollEnabled = NO;
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (!decelerate)
    {
        _outerScrollView.scrollEnabled = YES;
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    _outerScrollView.scrollEnabled = YES;
}

@end
Run Code Online (Sandbox Code Playgroud)

-------------------------------------------------- ---------------------

老答案:总是不起作用

以下是我解决问题的方法:

@implementation InnerView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.delaysContentTouches = NO;
    }
    return self;
}

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,self.delaysContentTouches = NO;使所有事件立即传递,并- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view防止响应者链传递这些事件.