インターフェイスの向きが変わるたびにフレームを更新し、高さを維持しながら幅を動的に更新して、常に新しい幅を埋めるUIScrollViewがあります。ページングが有効な横スクロール ビューなので、当然、新しいサイズに合わせてコンテンツを更新しています。私はこれを次のように行います(明らかに単純化されたコードですが、アイデアを得る必要があります):
scrollView.frame = CGRectMake(0.0f, 0.0f, window.size.width, 200.0f);
// Content is being deleted here
// Then redraw with the new width in mind
scrollView.contentSize = (window.size.width * [database count]);
[scrollView setContentOffset:CGPointMake(currentPostionX, 0.0f) animated:NO];
この方法は問題なく機能します。スクロールビューは、インターフェイスの向きが変わるたびに以前の位置を維持します。私の問題は、それが滑らかでないことです。実際、これは非常に見苦しく、contentOffset がリセットされているときに「アニメーション」が飛び跳ねたり、ぎくしゃくしたりすることがよくあります (「アニメーション」を YES に設定しても問題ありません)。
これを行うためのより良い方法が必要であり、スクロールビューが新しい次元に従ってその位置を維持するようにする必要があります。
何か案は?
更新:実際には、viewWillTransitionToSize の animateAlongsideTransition セクションで上記のメソッドを呼び出します。これにより、異なるサイズ間で変更する際に非常に優れたトランジションが作成されるためです。それらを完了セクションに入れると、ローテーション後にすべてが「ポップ」するだけで、かなり醜いです。このようにして、最後の正しい位置でのジャンプを除いて、すべてがスムーズです。