編集:私はある程度の進歩を遂げたので、問題を単純化して絞り込みました:新しい質問を作成しました。これはより明確で理解しやすいものになることを願っています
サブビューを再利用している非常に大きな水平スクロール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:
手動で呼び出すことです。これにより、アニメーションと並行して、再利用が通常どおりに機能します。しかし、それは単に機能しません-何も再利用されず、アニメーション後のスクロールビューのコンテンツはアニメーション前と同じ状態になります->以前に表示されていたページは画面の外に移動されます。
では、質問は、アニメーション中にサブビューを移動してコンテンツを更新する方法を絞り込みますか?
または多分これを行う完全に異なる方法があるかもしれません...