将2个UIScrollView链接到不同的分页大小

时间:2014-01-20 06:02:46

标签: ios iphone objective-c uiscrollview

我有iphone app我想要执行以下操作:

  1. 一个类别标题栏,它是一个水平scrolling自定义分页大小UIScrollView,用户可以在左侧或右侧swiping之间切换类别。
  2. 标题栏下方的类别内容页面,也是水平滚动UIScrollView(全屏宽度分页)。用户还可以通过向左或向右滑动来在内容页面之间切换。
  3. 我想要实现的目标如下:

    1. 两个UIScrollViews都链接在一起,因此在类别标题栏中滑动也会刷新内容页面,或者在内容页面中滑动也会刷标题栏。
    2. 如果无法做到这一点,那么至少用户必须能够刷相内容页面并相应地刷标题(反之亦然)。
    3. 我确实记得看到一些应用程序实现了这样的东西,虽然我现在不记得了。任何想法我该怎么做?

      谢谢!

2 个答案:

答案 0 :(得分:0)

我在我的应用程序中完成了它。类别视图就像一个“展示”视图,在滑动或触摸后,触发通知。内容可以是UICollectionView,因此它有setContentOffset:方法来“转到”目标网页。或者你可以在contentView中使用addChildViewController,并与pagingEnabled UIScrollView结合使用。

答案 1 :(得分:0)

参考Making two UIScrollViews follow each others scrolling,我通过将两个滚动视图的UIScrollView委托设置为父视图控制器并调用scrollViewDidScroll方法来完成它。

- (void)matchScrollView:(UIScrollView *)first toScrollView:(UIScrollView *)second {
    CGPoint offset = first.contentOffset;
    offset.x = (second.contentOffset.x/second.frame.size.width) * first.frame.size.width;
    first.contentOffset = offset;
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
     if([scrollView isEqual:firstScrollView]) {
        isSecondScrolling = NO;
    } else if ([scrollView isEqual:secondScrollView]) {
        isSecondScrolling = YES;
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if ([scrollView isEqual:firstScrollView] && isSecondScrolling == NO) {
        [self matchScrollView:secondScrollView toScrollView:firstScrollView];
    } else if ([scrollView isEqual:_midPanelScrollView] && isSecondScrolling == YES) {
        [self matchScrollView:firstScrollView toScrollView:secondScrollView];
    }
}

但是我添加了boolean isSecondScrolling,以阻止firstScrollView在secondScrollView滚动时启动matchScrollView。否则,它会导致secondScrollView的帧在每次滚动后稍微关闭。