UIScrollViewコントローラーをiPhone4およびiOS5.1と組み合わせて使用すると、奇妙な問題が発生します。
コンテンツサイズが640x480(実質的にダブルスクリーン)のUIScrollViewがあり、2つの「画面」を切り替えるためのスワイプに加えて、ユーザーが画面をタップできるようにします。
[scrollView scrollRectToVisible:(CGRectMake 320,0,320,480) animated:YES];
スクロールビューの右側が表示されているときにタップが発生した場合、最初の320は0になります(スクロールビューではページングが有効になっているため、完全に左または完全に右にのみ停止できます)。
また、スクロールビューを含むこのビューコントローラー上でpresentModalViewControllerを使用して、追加のビューコントローラーをモーダルに表示する場合もあります。
モーダルビューコントローラが表示され、その後閉じられるまで、すべてが完全に機能します。その後、animatedがYESに設定されている場合、scrollRectToVisibleメソッドは機能しなくなります(animatedをNOに変更すると、期待どおりに機能します)。タップはまだ登録されており、scrollRectToVisibleが呼び出されていることに注意してください。アニメーションがYESに設定されている場合は、何も実行されません。
これがキッカーです。このバグは、iOS5.xを実行しているiPhone4でのみ発生します。
私の場合は(モーダルビューコントローラーが表示された後でも)完全に機能します:4.xを実行しているiPhone 3G、3.xを実行しているiPhone 3GS、4.xを実行しているiPod touch(第2世代)、そして最も驚くべきことに、5.xを実行しているシミュレーター。
これはアニメーションシステムのバグであるかどうか疑問に思ったので、モーダルビューコントローラのプレゼンテーションでアニメーションを無効にして却下しましたが、これは効果がありませんでした。iOS5.1を搭載したiPhone4でも問題が発生しました。
何がこれを引き起こしているのか、そして私がそれをどのように回避するのかについて誰かが何か考えを持っていますか?