0

我正在寻找一种方法来实现以下内容:

  • 有一个“主”滚动视图,其中包含顶部的全屏 UIView 和下方的全屏 UIScrollView
  • 当用户滚动经过顶部的 UIView 时,底部的 scrollView 是可见的,并成为滚动事件的响应者
  • 当用户尝试从底部 UIScrollView 向上滚动时,触摸会被重定向,因此他们控制“主”滚动视图并再次将 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];

我试图使用委托方法来达到预期的效果,但是在切换到底部滚动视图之前,我似乎无法阻止“主”滚动视图滚动。

4

2 回答 2

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 的:Session 104 - Designing Apps with Scroll Views。这有很多关于如何设置滚动视图并真正充分利用它们的信息。

希望这可以帮助!

于 2013-06-07T09:01:07.520 回答
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
    }
}
于 2014-10-01T13:27:12.243 回答