2

嗨,大家好!

我有一个关于嵌套滚动视图的问题。

有一个包含嵌套滚动视图的滚动视图。我将只调用external-scrollviewinner-scrollview。outer-scrollview 是水平滚动视图,inner-scrollviews 是垂直滚动视图。

- (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 个滚动视图会同时滚动。

如果我滚动到leftright,则external-scrollview将被滚动。

如果我滚动到topbottom,则inner-scrollview将被滚动,

并且,如果我沿对角线滚动,两者之一将被滚动。这取决于滚动的方向。

在此处输入图像描述

如果角度为 0~45 度,inner-scrollview会滚动。如果角度为 45~90 度,outer-scrollview将被滚动。

可以改变角度吗?

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

谢谢!

任何帮助,将不胜感激 :)

4

1 回答 1

2

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

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

touchesBegan:
touchesMoved:
touchesEnded:
touchesCancelled:

并且

touchesShouldBegin:

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

于 2013-03-27T06:35:37.593 回答