什么是“团结”在一起并保持同步一对UIScrollView的正确方法?

时间:2009-09-28 13:12:27

标签: iphone cocoa-touch uiscrollview

我希望在并行工作的屏幕上有一对scrollview - 称为scrollA和scrollB。当用户滚动/缩放scrollA时,scrollB模仿该行为,缩放和平移相同。反之亦然。

这可能吗?提前谢谢。

干杯, 道格

5 个答案:

答案 0 :(得分:5)

根据JoePasq的回答,我会使用KVO并注册观察者,以便在每个UIScrollView中模仿您想要模仿的任何键/值对。它看起来像这样(未经测试):

// Do this during initialisation of scrollView2
[scrollView1 addObserver:self
              forKeyPath:@"contentOffset"
                 options:NSKeyValueObservingOptionNew
                 context:NULL];

[scrollView1 addObserver:self
              forKeyPath:@"zoomScale"
                 options:NSKeyValueObservingOptionNew
                 context:NULL];

// Implement this method on scrollView2
- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {

  [self setValue:[change valueForKey:NSKeyValueChangeNewKey] forKey:keyPath];
}

答案 1 :(得分:2)

我认为最好的方法是将每个scrollview的委托设置为你的控制器然后在控制器中实现' - (void)scrollViewDidScroll:(UIScrollView *)scrollView',在你想要调用的方法中setContentOffset:animated:'在滚动视图上没有滚动,为了获得正确的contentOffset,你可以使用滚动的UIScrollView的UIScrollView.contentOffset属性,该属性将被传递给你的实现 - (void)scrollViewDidScroll:(UIScrollView * )你的控制器中的scrollView

答案 2 :(得分:0)

键值编码,如果您不知道然后为Mac OS X选择Cocoa编程,并通过stephen kochan(拼写和标点符号)学习Objective-C

检查文档以获取滚动视图的位置(如tableview的索引),然后设置KVC。那么你就会明白iPod在退出后如何保持你的滚动位置。

答案 3 :(得分:0)

这也适用于轻弹手势吗?

根据我的经验,在完成轻弹手势减速后,contentOffset会更新..所以即使使用KVO,它仍然会观察旧的contentOffsets

我是对的吗?

答案 4 :(得分:0)

  

也许我错过了其他人明显的东西,但这怎么可能两种方式都有效?它适用于主人和奴隶"场景,但如果两个滚动视图彼此模仿,它会以无限循环结束。救命? - Sedate Alien 5月4日&11; 11:08

跟踪被拖动的最后一个视图,并在" scrollViewWillBeginDragging:"您可以删除以前的观察者(如果有)并为要拖动的视图添加新的观察者。

我能够成功地做到这一点。