私は非常に奇妙な問題に遭遇しました。私は完全に道に迷ったので、誰かがここで私を助けてくれるかどうか疑問に思っていました.
コンテキスト: 比較的単純な階層を持つアプリを開発しています。ビューコントローラーはほんの少しですが、高解像度の画像がかなりあります。それらはUIScrollView
いくつかのテキストなどで表示されます。ポートレートモードでテストしている間、スクロールビューはまったくスムーズにスクロールしませんでした。フレームレートが 4 ~ 5 fps に落ちたようです。最初は、高解像度の画像のせいだと思いました。
しかしその後、iPad を横向きモードにすると、すべてがスムーズに実行されました。私は縦向きと横向きの別々の xib ファイルを持っているので、縦向きの xib に問題があるはずだと思いました。それはありませんでした。どちらも同じ VC クラスを持っていたため、同じコードを使用し、両方の xib は、ビューのサイズと位置を除いてほぼ同じです。
問題を絞り込むために、Instrument の TimeProfiler を使用して問題の原因を調べました。結局のところ、TimeProfiler は[NSISEngine optimize]
(によってトリガーされたNSLayoutConstraint
) への呼び出しをいくつか示しました。縦向きモードでは、より多くの呼び出しが行われ、それらの呼び出しにかかる時間ははるかに長くなりました。ツリーをさらに下に見ると、ポートレート モードで[NSISEngine optimize]
は呼び出され[NSISEngine fixupIntegralizationViolations]
、ランドスケープ モードでは呼び出されないことがわかりました。
rootVCとrootVCによって提示される他の1つを除いて、アプリからすべてのviewcontrollerを削除しました。提示された vc には、いくつかの画像、ボタン、およびいくつかのアニメーションが含まれています。両方の向きに xib が 1 つだけあり、(他のすべてと同様に) autolayout でレイアウトされます。
レイアウトは両方の向きで正常に機能し、あいまいさはありません (私が知る限り、少なくとも何も表示されpo [[UIWindow keyWindow] _autolayoutTrace]
ません)。
VC のプレゼンテーション プロセスの TimeProfile のスクリーンショットを添付しました。1 つはポートレート用、もう 1 つはランドスケープ用です。ご覧のとおり、横向きでは呼び出しに[NSISEngine optimize]
1 ミリ秒しかかかりませんが、縦向きでは 3000 ミリ秒以上かかります。
その理由を教えてくれる人はいますか?または、問題が何であるかを知るために何ができるか考えていますか?
どんな助けでも大歓迎です!
どうも
画像の拡大版へのリンク:リンク