0

編集:私はある程度の進歩を遂げたので、問題を単純化して絞り込みました:新しい質問を作成しました。これはより明確で理解しやすいものになることを願っています


サブビューを再利用している非常に大きな水平スクロールUIScrollViewがあります。ユーザーが左にスクロールすると、右端のビューが左端の位置に移動し、その内容が更新されます。同様に、ユーザーが右にスクロールすると、左端のビューが右端の位置に移動し、その内容が更新されます。同様にUITableViewのように。これは、scrollviewDidScroll:デリゲートメソッドを使用するとうまく機能します。

次に、オフセットをプログラムで変更する必要がありますが、カスタムアニメーションの動作(慣性と最終位置へのバウンス)を使用します。

これをプロトタイプ化するために、私は使用します

[UIView animateWithDuration:contentOffsetCADuration 
                      delay:0 
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
                      [self setContentOffsetNoDelegateCalls:contentOffset animated:NO];
                 }
                 completion:^(BOOL finish){
                      dispatch_async(dispatch_get_main_queue(), ^{
                          [timer invalidate];
                      });
                 }];

ここで、デリゲートコールバックを無効にしてコンテンツオフセットをアニメーション化し、アニメーション中にビューが混乱しないようにします。しかし、それらを同時に再利用して再配置するための何かが必要です。

私の解決策は、タイマーを作成してscrollViewDidScroll:手動で呼び出すことです。これにより、アニメーションと並行して、再利用が通常どおりに機能します。しかし、それは単に機能しません-何も再利用されず、アニメーション後のスクロールビューのコンテンツはアニメーション前と同じ状態になります->以前に表示されていたページは画面の外に移動されます。

では、質問は、アニメーション中にサブビューを移動してコンテンツを更新する方法を絞り込みますか?

または多分これを行う完全に異なる方法があるかもしれません...

4

2 に答える 2

1

ここで私の答えを確認してください。

編集:笑、同じ作者だと気づいた

于 2012-04-18T13:07:19.587 に答える
-1

メソッドでスクロールオフセットを変更しようとすると、それを呼び出すことができます

    [self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>];

次に、特定の値に達したときに停止します

于 2012-04-17T14:09:22.617 に答える