廃墟

本ブログは更新を終了しました。 技術的な記事のみ、有用性を鑑みて残しておきます。

AutoLayout時代のCALayerの扱い方

今日もまたiOSアプリ開発の話ですよ。 まぁ @Naruse_T さんに教えてもらったことを噛み砕いて書くだけなんですけどね。

(ISUCON2013予選の話も書かなきゃなー)

アプリをある程度開発していくと、CALayerを直接触る機会が出てきますよね。
UITableViewCellの高速化とか、カメラのAVCaptureVideoPreviewLayerとか。
(UITableViewCellは環境によってサイズは変わらないから、今回の記事には関係ないかも)

CALayer周りの処理ってviewWillAppearに書くことがほとんどだと思うんですが、AutoLayout によるサイズの調整はviewWillAppearより後に行われるのです。 だから、viewWillAppearでサイズを計算してCALayerを使って描画すると、AutoLayoutの恩恵を被ることが出来ません。

じゃあどうすればいいのか、というと。。

なんと、UIViewControllerにviewDidLayoutSubviewsというメソッドが追加されていたのです。 iOS5から使えます。 こいつはAutoLayoutが完了した後に呼ばれるので、ここでCALayerのframeを処理すれば万事解決する、というわけです。

Thanks @Naruse_T