如何与多个 UIScrollView 同步滚动?

Posted

技术标签:

【中文标题】如何与多个 UIScrollView 同步滚动?【英文标题】:How to sync scroll with multiple UIScrollViews? 【发布时间】:2011-12-14 15:06:59 【问题描述】:

我有 2 个 UIScrollView,每个都显示一个图像(概览和缩放模式)。我已经可以单独滚动两个视图,现在我想保持两个视图的中心点同步。

我想当一个视图创建事件时,我需要将它们也转发到另一个视图,只是无法找出哪些功能是相关的。有什么提示吗?

编辑:如果无法进行并行实时滚动,我想至少在滚动事件之后进行同步。

【问题讨论】:

【参考方案1】:

查看函数

-setContentOffset:animated: -contentOffset -zoomScale -setZoomScale:animated: -zoomToRect:animated:

您可以在委托方法-scrollViewDidScroll: 中将它们链接在一起,该方法在用户滚动时不断调用。

【讨论】:

谢谢你,真的很棒! - (void)scrollViewDidScroll:(UIScrollView *)scrollView if(scrollView==v1) v2.contentOffset = v1.contentOffset; else if(.......【参考方案2】:

这不是特定于这里的要求,但有助于在不同类之间同步滚动视图。

要在不同类之间同步滚动视图,请使用 NSNotificationCenter 来观察特定通知。

当滚动发生时,然后在 -scrollViewDidScroll: 委托方法中,使用 NSNotificationCenter 发布通知(userInfo 内容为 scrollView.contentOffset.x & scrollView.contentOffset.y) 示例:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

NSMutableDictionary *userInfo = [[NSMutableDictionary alloc]init];
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.x]
          forKey:@"offsetX"];
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.y]
          forKey:@"offsetY"];

[[NSNotificationCenter defaultCenter] postNotificationName:@"scrollSync"
                                      object:nil
                                      userInfo:userInfo];


在同一类或任何其他类中注册此通知,并在您要同步的 scrollView/s 上执行 -setContentOffset: 方法。 .添加观察者的示例(在 didLoad 或 init 中或任何适合您的任意类中):

[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(handleNotification:)
                                      name:@"scrollSync" object:nil];

.选择器方法示例

-(void)handleNotification:(NSNotification *)sender

float newX = [[sender.userInfo objectForKey:@"offsetX"] floatValue];
float newY = [[sender.userInfo objectForKey:@"offsetY"] floatValue];

[myOtherScrollView setContentOffset:CGPointMake(newX,newY)];

【讨论】:

以上是关于如何与多个 UIScrollView 同步滚动?的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIScrollView 在多个图像之间水平滚动

如何同时使用 UIScrollView 和 UITableView 实现平滑滚动?

iOS:如何同步两个 UIScrollview

将多个容器视图放在 ios 中的分页 UIScrollView 中

如何将 UITableviewcell 子视图添加为 uiscrollview

水平 UIScrollView 中的多个垂直滚动 UIScrollView