我有2个UIScrollViews,每个都显示一个图像(概述和缩放模式)。我可以单独滚动两个视图,现在我想保持两个视图的中心点同步。
我猜其中一个视图正在创建事件时,我需要将它们转发到另一个视图,只是找不到哪些函数是相关的。任何提示?
编辑:如果无法进行并行实时滚动,我希望至少在滚动事件后同步。
答案 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)];
}