AutoLayout時代のCALayerの扱い方
今日もまたiOSアプリ開発の話ですよ。 まぁ @Naruse_T さんに教えてもらったことを噛み砕いて書くだけなんですけどね。
(ISUCON2013予選の話も書かなきゃなー)
アプリをある程度開発していくと、CALayerを直接触る機会が出てきますよね。
UITableViewCellの高速化とか、カメラのAVCaptureVideoPreviewLayerとか。
(UITableViewCellは環境によってサイズは変わらないから、今回の記事には関係ないかも)
CALayer周りの処理ってviewWillAppearに書くことがほとんどだと思うんですが、AutoLayout によるサイズの調整はviewWillAppearより後に行われるのです。 だから、viewWillAppearでサイズを計算してCALayerを使って描画すると、AutoLayoutの恩恵を被ることが出来ません。
じゃあどうすればいいのか、というと。。
@AknEp viewDidLayoutSubviewsとかどうでしょう…(問題がよくわかってないので的外れだったらごめんなさい!
— 成瀬辰也 (@Naruse_T) October 4, 2013
なんと、UIViewControllerにviewDidLayoutSubviewsというメソッドが追加されていたのです。 iOS5から使えます。 こいつはAutoLayoutが完了した後に呼ばれるので、ここでCALayerのframeを処理すれば万事解決する、というわけです。
Thanks @Naruse_T