1

私は 2 つの UIScrollViews を持っており、ユーザーがスクロールビューでスクロールすると、他のスクロールビューもスクロールできるようにしたいと考えています。最初にパンされたスクロールビューからパンジェスチャーレコグナイザーを他のスクロールビューに渡すことを含む解決策を読みましたが、そうすると元のスクロールビューはまったくスクロールしません。

デリゲートメソッドがあることがわかりました

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

しかし、スクロールビューのパンジェスチャーレコグナイザーのデリゲートを接続しようとすると、アプリがクラッシュします。

誰かが私を助けてくれることを願っています。

4

1 に答える 1

1

2番目の ScrollView の Bounds を更新するだけです

何かのようなもの :-

CGRect updateTheViewWithBounds = viewToUpdate.bounds;
updateTheViewWithBounds.origin = scrolledView.contentOffset;
viewToUpdate.bounds = updateTheViewWithBounds;

これは仕事をします。

コメントからわかるように、小さな例を挙げます。

UiViewController に 2 つの scrollView を作成します。

scrollOne = [[UIScrollView alloc] init];
    [scrollOne setBackgroundColor:[UIColor greenColor]];
    [scrollOne setFrame:CGRectMake(10, 20, 200, 300)];
    [scrollOne setContentSize:CGSizeMake(600, 600)];
    scrollOne.delegate = self;

    scrollTwo = [[UIScrollView alloc] init];
    [scrollTwo setBackgroundColor:[UIColor redColor]];
    [scrollTwo setFrame:CGRectMake(230, 20, 200, 300)];
    [scrollTwo setContentSize:CGSizeMake(600, 600)];
    scrollTwo.delegate = self;


    [self.view addSubview:scrollOne];
    [self.view addSubview:scrollTwo];

UIScrollView Delegates に準拠し、同じものを実装します。

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if([scrollView isEqual:scrollOne])
    {
        CGRect updateTheViewWithBounds = scrollOne.bounds;
        updateTheViewWithBounds.origin = scrollOne.contentOffset;
        scrollTwo.bounds = updateTheViewWithBounds;
        [scrollTwo flashScrollIndicators];
    }
    else if([scrollView isEqual:scrollTwo])
    {
        CGRect updateTheViewWithBounds = scrollTwo.bounds;
        updateTheViewWithBounds.origin = scrollTwo.contentOffset;
        scrollOne.bounds = updateTheViewWithBounds;
        [scrollOne flashScrollIndicators];
    }
}

上記の scrollView のいずれかをスクロールすると、両方の scrollView がスクロールされます。

于 2013-03-14T11:59:43.593 に答える