嵌套的UIScrollView - 滚动方向

时间:2013-03-27 05:28:53

标签: iphone ios objective-c ipad uiscrollview

嗨,伙计们!

我对嵌套滚动视图有疑问。

有一个包含嵌套滚动视图的滚动视图。我将调用外部scrollview inner-scrollview 。 outer-scrollview是水平scrollview,inner-scrollview是vertical-scrollview。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    _outerScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    _outerScrollView.pagingEnabled = YES;
    _outerScrollView.contentSize = CGSizeMake(_outerScrollView.frame.size.width * 3, _outerScrollView.frame.size.height);
    [self.view addSubview:_outerScrollView];

    for(int i=0; i<3; i++) {

        UIScrollView *innerScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(i * _outerScrollView.frame.size.width,
                                                                                             0,
                                                                                             _outerScrollView.frame.size.width,
                                                                                             _outerScrollView.frame.size.height)];
        [_outerScrollView addSubview:innerScrollView];


        UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, innerScrollView.frame.size.width, innerScrollView.frame.size.height * 2.0)];
        contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imagefile"]];
        [innerScrollView addSubview:contentView];

        innerScrollView.contentSize = contentView.frame.size;

    }
}

基本上,如果只有1个滚动视图同时滚动。

如果我滚动到,则会滚动外部滚动视图

如果我滚动到顶部底部,则会滚动 inner-scrollview

如果我滚动对角将滚动其中一个。这取决于滚动的方向。

enter image description here

如果角度为0~45度,则会滚动内部滚动视图。 如果角度为45~90度,则会滚动外部滚动视图

是否可以更改 ANGLE

例如,即使角度为30度,我也想水平滚动。

谢谢!

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:2)

如果您想要一种简单的方法来实现这种嵌套的scrollview动作,您可以尝试简单地禁用内部视图的水平滚动并禁用外部视图的垂直滚动。但是,如果这不能为您提供所需的结果,则需要进行大量自定义编码。

首先,您需要启动自己的UIScrollView子类。首先覆盖这些功能:

touchesBegan:
touchesMoved:
touchesEnded:
touchesCancelled:

以及

touchesShouldBegin:

从那里开始,您必须进行自己的计算以确定拖动的角度并相应地向滚动视图发送消息,可能在上述一个或多个函数中调用super。您也可以考虑从头开始编写自己的scrollview,您可以简单地将UIView作为子类的子视图。