このViewは一体何のために存在するのか
https://teratail.com/questions/28516
で説明されているように、UITransitionViewはpresentViewController()
を実行するだけで作られます。
presentViewController()
で表示された遷移先画面は、役目が終われば通常はdismissViewControllerAnimated()
を実行して遷移元の画面に戻るので、その際にUITransitionViewも消滅します。しかし、元の画面に戻らないまま、遷移先の画面からさらに新しいビューコントローラーを生成してpresentViewController()
で画面遷移すると、さらに新しいUITransitionViewが作られます。
もし10個もUITransitionViewがあるのなら、おそらく元の画面に戻らないまま、どんどんpresentViewController()
を実行し続ける画面遷移構造になっているのではないかと推測します。
UITransitionViewが何のために存在しているかについては、これはSDKの内部で生成しているクラスでありAppleのドキュメントに説明されていないので詳しくわかりません。おそらく画面遷移を戻るときに戻り先のビューへの切り替えアニメーションに使っているのだろうと推測します。
複数生成されてしまったときに、動作が重くなるなどの不具合は発生するのか
発生する場合、対策はどうすればいいのか
もしdismissViewControllerAnimated()
で戻ることなくpresentViewController()
で新しい画面に遷移し続ける構造になっているのであれば、UITransitionViewだけでなく遷移元のビューコントローラーやそこで表示されているビュー等、いろいろなオブジェクトが遷移先画面からの戻りをずっと待っている状況です。いずれ遷移元に戻る予定ならそれでよいですが、既に不要な画面で戻る予定がないのに待たせたままになっているなら、そのまま使い続けることでいずれメモリ不足になる可能性があります。
現在の画面が不要になって新しい画面に遷移したい場合は、一旦親のビューコントローラーに戻って、子供を消滅させた後、元の親から再度新しい子供を生成して画面遷移するような画面設計に見直すことをお勧めします。
なお、「UIViewControllerWrapperView」の方は、UINavigationControllerを使った時にSDK内部で生成されているのを見たことありますが、これが10個も同時に作られている状況はあまり見たことないです。
(こちらは、pushViewControllerで画面遷移してもUIViewControllerWrapperViewが増えることはありません)
presentViewController()
でUINavigationControllerを何個も生成しているならそういう状況になるかもしれませんが、詳しい画面遷移構造が説明されていないので、これ以上推測の話をするのはやめておきます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/01 05:42
2016/04/01 09:19
2016/04/01 11:30