Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIScrollView位于UIScrollView的底部_Ios_Objective C_Uiscrollview - Fatal编程技术网

Ios UIScrollView位于UIScrollView的底部

Ios UIScrollView位于UIScrollView的底部,ios,objective-c,uiscrollview,Ios,Objective C,Uiscrollview,我正在寻找实现以下目标的方法: 有一个“主”滚动视图,该视图顶部包含全屏UIView,下面包含全屏UIScrollView 当用户滚动过顶部UIView时,底部scrollView可见,并成为滚动事件的响应程序 当用户试图从底部UIScrollView向上滚动时,触摸会被重定向,以便控制“主”滚动视图,并再次将UIView带入视图 为了让大家了解这一点,以下是我目前的实施情况: // Initialise components: mainScreen = [[UIScreen ma

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

  • 有一个“主”滚动视图,该视图顶部包含全屏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];

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

苹果免费提供此功能,所以好消息是,您不需要在这里直接编写任何代码(除非您想要一些有点古怪的东西). 这种效果是通过分页实现的

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-使用滚动视图设计应用程序。这有很多关于如何设置滚动视图以及如何充分利用它们的信息


希望这有帮助

因此,如果要使用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
    }
}
覆盖函数scrollViewDidScroll(scrollView:UIScrollView){
if(scrollView.contentOffset.y>=(scrollView.contentSize.height-scrollView.frame.size.height)){
//触底
}
if(scrollView.contentOffset.y<0){
//到达顶端
}
if(scrollView.contentOffset.y>=0&&scrollView.contentOffset.y<(scrollView.contentSize.height-scrollView.frame.size.height)){
//不上不下
}
}

感谢您的建议-分页可能有助于减少我试图实现的“过渡”,但您的建议与我的想法略有不同。-我基本上有一个scrollview集成在scrollview中,两个视图都是垂直滚动的,问题是如何处理这两个视图之间的“过渡”,以便底部scrollview能够控制,并在“主”scrollview滚动到底部时启用。UIScrollView会自动实现这一点。当您到达子滚动视图的底部时,它会自动允许触摸事件进入父滚动视图。以相反方向滚动时相同。