2012-04-26 10 views
3

私は2つのUIScrollViewsを持ち、互いに重なり合います。2つのUIScrollViews、同期スクロール

私はそれを次のように動作させたいと思います。 UIScrollView2をスクロールすると、UIScrollView1も同じcontentOffsetでスクロールする必要があります。それは同期で行わなければならないので、scrollViewDidScrollを使用することはオプションではありません。皆さんはいくつかのアイデアを持っていますか、どうすればできますか?

ソースコード

_prContentGridView = [[PRContentGridView alloc] initWithFrame:frame]; 
    _prContentGridView.minimumZoomScale = 0.25; 
    _prContentGridView.maximumZoomScale = 2.0; 
    _prContentGridView.delegate = self; 

    _prBackgroundGridView = [[PRBackgroundGridView alloc] initWithFrame:frame]; 

    [self addSubview:_prBackgroundGridView]; 
    [self addSubview:_prContentGridView]; 

デリゲートメソッド

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (_prContentGridView.scrollEnabled == YES) { 
     CGPoint p = CGPointMake(scrollView.contentOffset.x - _prevousContentOffsetOfContentScrollView.x, scrollView.contentOffset.y - _prevousContentOffsetOfContentScrollView.y); 
     [_prBackgroundGridView setContentOffset:p animated:YES]; 
    } 
} 
+0

あなたが実際にscrollViewDidScrollを使用してみましたが?もちろん私は試してみた。 – Vladimir

+0

。デリゲートメソッドが遅すぎると呼び出され、UIScrollView1はUIScrollView2の数秒後に停止します。 – pawelropa

+0

???どのように遅く呼び出すことができますか?スクロールビューがその内容を新しい座標に移動する前に呼び出さなければなりません...もし遅れていたら、何かがどこかで間違っているかもしれません...コードを投稿してください – meronix

答えて

8

UIScrollViewDelegateプロトコルメソッドを使用します。あなたは は、最初の.hファイルにIBOutletを宣言し、このコードを試してみてください

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    if (scrollView == UIScrollView1){ 
    UIScrollView2.contentOffset = scrollView.contentOffset; 
    }else{ 
    UIScrollView1.contentOffset = scrollView.contentOffset; 
    } 
} 
+0

2つのUIScrollViewsのcontentSizeが同じですが、私のUIScrollViewsのcontentSizeが異なると動作します。あなたのソリューションを修正して適用します。ありがとうございました。 – pawelropa

+0

OK、編集した新しいコードを追加したことを後で見てみましょう...あなたは歓迎です – meronix

+0

'[UIScrollview setContentOffset:animated:]'を使用すると、2番目のスクロールビューがタッチされたものよりも遅れているようです。 '[UIView animateWithDuration:animations:]'を使用し、 '.contentOffset'プロパティを設定すると、より滑らかです。 ([参考回答](http://stackoverflow.com/a/11723874/168594)) – zekel

2

を、

IBOutlet UIScrollView *FirstScrollView; 
IBOutlet UIScrollView *SecondScrollView; 

、このコードを試してみてください、

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if ([scrollView isEqual: FirstScrollView]) 
    { 
      SecondScrollView.contentOffset = 
       CGPointMake(FirstScrollView.contentOffset.x, 0); 
    } 
    else 
    { 
      FirstScrollView.contentOffset = 
       CGPointMake(SecondScrollView.contentOffset.x, 0); 
    } 
} 
関連する問題