編集:私はいくつかの進歩を得たので、私は単純化していると、問題を狭め:I have created new question, which is more clearer and more understandable I hopeビューを再利用してUIScrollViewのCore Animationでコンテンツオフセットを変更する方法はありますか?
私は非常に大規模な水平にサブビューを再利用しているUIScrollViewのを、スクロールしています。ユーザーが左にスクロールすると、右端のビューが一番左の位置に移動し、その内容が更新されます。同様に、ユーザーが右にスクロールすると、一番左のビューが一番右の位置に移動し、その内容が更新されます。同様に、UITableViewのようです。 scrollviewDidScroll:delegateメソッドを使用してうまく動作します。
ここでは、プログラム的にオフセットを変更する必要がありますが、カスタムアニメーションの動作(慣性と最終位置に戻る)が必要です。これをプロトタイプに
、私は、ビューは、アニメーションの間に混乱しないように、私は、無効デリゲートコールバックでオフセットコンテンツをアニメーション
[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:
を手動で呼び出すことです。通常はアニメーションと並行して再利用するようにします。アニメーションがアニメーションの前と同じ状態になってからスクロールビューのコンテンツが再表示され、以前は表示されていたページが画面外に移動します。
アニメーション中にサブビューを移動してコンテンツを更新する方法を絞り込んでいますか?
それとも、これをやって、完全に別の方法があるかもしれない...
ない私は理解してだ気づいた - 「そうビューがアニメーション中にめちゃくちゃされていない」、そして質問「どのようにサブビューを移動する...アニメーション中」 。 setContentOffset:animated:なぜ呼び出さないの? scrollViewDidScrollが呼び出され、サブビューの位置を常に変えますか? – danh
はい、カスタムアニメーションが必要です。私はUIScrollViewを実際にサブクラス化し、setContentOffset:animated:をオーバーライドしました。 animatedがyesの場合、Core Animationカスタムアニメーションを実行する必要があります。問題は、このカスタムアニメーション中に私はサブビューを再利用できないということです。 –
setContentOffset:animated:アニメーションブロック内で、viewDidScrollが呼び出されない代わりに、アニメーションの最初と最後に他のデリゲートメソッドが呼び出されますが、これは嫌いです。 –