链接 2 UIScrollView 与不同的分页大小
Posted
技术标签:
【中文标题】链接 2 UIScrollView 与不同的分页大小【英文标题】:Linking 2 UIScrollView with different paging sizes 【发布时间】:2014-01-20 06:02:45 【问题描述】:我有一个iphone app
,我想在其中执行以下操作:
-
一个类别标题栏,它是一个水平的
scrolling
自定义分页大小UIScrollView
,用户可以在其中通过swiping
左右切换类别。
标题栏下方的类别内容页面,也是水平滚动的UIScrollView
(全屏宽度分页)。用户还可以通过向左或向右滑动来在内容页面之间切换。
我想要达到的目标如下:
UIScrollViews
都链接在一起,因此在类别标题栏中滑动也会滑动内容页面,或者在内容页面中滑动也会滑动标题栏。
如果无法做到这一点,那么至少,用户必须能够滑动内容页面,并且标题也相应地滑动(不需要反向操作)。
我确实记得看到一些应用程序实现了类似的功能,但我现在想不起来了。有什么想法我该怎么做?
谢谢!
【问题讨论】:
【参考方案1】:我已经在我的应用程序中完成了。类别视图就像一个“展示”视图,在滑动或触摸后,触发通知。内容可以是UICollectionView
,因此它有setContentOffset:
方法来“转到”目标页面。或者您可以在 contentView 中使用addChildViewController
,并与 pagingEnabled UIScrollView
结合使用。
【讨论】:
【参考方案2】:参考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];
但是我添加了布尔值 isSecondScrolling,以阻止 firstScrollView 在 secondScrollView 滚动时启动 matchScrollView。否则会导致 secondScrollView 的框架在每次滚动后稍微偏离。
【讨论】:
以上是关于链接 2 UIScrollView 与不同的分页大小的主要内容,如果未能解决你的问题,请参考以下文章
将多个容器视图放在 ios 中的分页 UIScrollView 中