UIScrollView底部的UIScrollView

时间:2013-06-07 08:46:26

标签: ios objective-c uiscrollview

我正在寻找实现以下方法的方法:

  • 有一个'master'scrollView,其中包含顶部的全屏UIView和位于此下方的全屏UIScrollView
  • 当用户滚过顶部UIView时,底部scrollView可见并成为滚动事件的响应者
  • 当用户尝试从底部UIScrollView向上滚动时,触摸被重定向,因此它们控制“主”scrollView并再次将UIView带入视图。

为了说明如何设置,这是我当前的实现:

// Initialise components:

    mainScreen = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = mainScreen.size.height-20;

    // Scroll View Controller

    _scrollControl = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, screenHeight)];
    _scrollControl.contentSize = CGSizeMake(320, 2*screenHeight); // Twice as big as the screen size for both views to fit
    _scrollControl.backgroundColor = [UIColor clearColor];
    _scrollControl.delegate = self;

    // Top View

    _topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, screenHeight)];
    _topView.backgroundColor = [UIColor redColor];

    [_scrollControl addSubview:_topView];

    // Bottom View
    _bottomView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, screenHeight, 320, screenHeight)];
    _bottomView.backgroundColor = [UIColor yellowColor];
    _bottomView.contentSize = CGSizeMake(320, 2*screenHeight);

    _bottomView.delegate = self;

    UILabel *imageLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 700)];
    imageLabel.backgroundColor = [UIColor greenColor];

    [_bottomView addSubview:imageLabel];

    [_scrollControl addSubview:_bottomView];

    // Add to main view
    [self.view addSubview:_scrollControl];

我尝试使用委托方法实现所需的效果,但是在切换到底部scrollView之前,我似乎无法阻止“主”scrollView滚动。

2 个答案:

答案 0 :(得分:0)

Apple免费提供此功能,所以好消息是你不需要在这里直接编写任何代码(除非你想要一些有点时髦的东西)。通过分页

实现效果
scrollView.pagingEnabled = YES;

在此之前,您将需要在主滚动视图中嵌入您的子视图(UIView和UIScrollView)。它们中的每一个应该具有相同的大小或单个页面的大小。所以让我们说主滚动视图是100,100点,我们可以像这样设置它:

CGRect pageRect = CGRectMake(0, 0, 100, 100);
NSInteger pageCount = 2;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:pageRect];
scrollView.pagingEnabled = YES;

UIView *page1View = [[UIView alloc] initWithFrame:pageRect];
page1View.backgroundColor = [UIColor redColor];
[scrollView addSubview:page1View];
pageRect.origin.x += pageRect.size.width;

UIView *page2View = [[UIView alloc] initWithFrame:pageRect];
page2View.backgroundColor = [UIColor blueColor];
[scrollView addSubview:page2View];

scrollView.contentSize = CGSizeMake(pageRect.size.width * pageCount, 
                                    pageRect.size.height);

那应该给你基础知识。正如您所看到的,我们在此示例中将子视图一个接一个地水平放置。我们将内容大小设置为涵盖两个子视图并启用分页。 UIScrollView应该处理其余的事情。

一个值得关注的地方是WWDC会议视图,特别是WWDC 2010的会议视图:会议104 - 使用滚动视图设计应用程序。这有很多关于如何设置滚动视图并真正充分利用它们的信息。

希望这有帮助!

答案 1 :(得分:0)

因此,如果您想使用swift检测它,请使用以下命令:

override func scrollViewDidScroll(scrollView: UIScrollView) {

    if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
        //reach bottom
    }

    if (scrollView.contentOffset.y < 0){
        //reach top
    }

    if (scrollView.contentOffset.y >= 0 && scrollView.contentOffset.y < (scrollView.contentSize.height - scrollView.frame.size.height)){
        //not top and not bottom
    }
}