如何与多个UIScrollViews同步滚动?

时间:2011-12-14 15:06:59

标签: ios uiscrollview

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

我猜其中一个视图正在创建事件时,我需要将它们转发到另一个视图,只是找不到哪些函数是相关的。任何提示?

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

2 个答案:

答案 0 :(得分:15)

查看功能

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

答案 1 :(得分:3)

这不是特定于此处的要求,但有助于在不同类之间同步scrollView。

要在不同类之间同步scrollView,请使用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)];
}