【Swift/UIKit】UIViewを明示的に再描画する方法!setNeedsDisplayなどの違い

【Swift/UIKit】UIViewを明示的に再描画する方法!setNeedsDisplayなどの違い

この記事からわかること

  • Swift/UIKitUIViewクラスとは?
  • 明示的再描画させる方法
  • setNeedsDisplayメソッド使い方
  • setNeedsLayoutlayoutIfNeededlayoutSubviews違い

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

参考文献:「setNeedsDisplay」、「setNeedsLayout」、「layoutIfNeeded」、「layoutSubviews」の違い

UIViewを明示的に再描画する方法

SwiftのUIViewクラスを明示的に再描画するためにはいくつかの方法があります。それぞれのメソッドの役割や挙動などをいまいち理解できていなかったのでまとめていきたいと思います。

UIView自体については以下の記事を参考にしてください。

こんなツリー構造になっていることも思い出しておくとスムーズです。

【Swift/UIKit】UIViewControllerの役割とは?ビュー階層とviewDidLoadメソッド

setNeedsDisplayメソッド

公式リファレンス:setNeedsDisplayメソッド

setNeedsDisplayビューのコンテンツを再描画する必要があることをシステムに通知するメソッドです。処理は非同期的に動作し、これにより内部的に再描画が必要であることがマークされ、次の描画サイクルのタイミングで対象のUIViewが再描画されます。そのため即座に再描画される訳ではないので注意してください。またメインスレッドから呼び出すことが推奨されています。

再描画が必要であることが通知してくれるのは呼び出したルートにあるUIViewのみであり、サブビューたちの分は通知してくれません。

setNeedsLayoutメソッド

公式リファレンス:setNeedsLayoutメソッド

setNeedsLayoutsetNeedsDisplayと同じビューのコンテンツを再描画する必要があることをシステムに通知するメソッドです。setNeedsDisplayと異なるのは呼び出したビューの配下にある子や孫ビューも再描画対象として通知してくれる点です。こちらもメインスレッドから呼び出すことが推奨されています。

layoutIfNeededメソッド

公式リファレンス:layoutIfNeededメソッド

layoutIfNeededメソッドは強制的に即座にレイアウトを更新し、再描画を行うメソッドです。呼び出したビューの配下にある子や孫ビューも再描画されます。こちらもメインスレッドから呼び出すことが推奨されています。

layoutSubviewsメソッド

公式リファレンス:layoutSubviewsメソッド

layoutSubviews子ビューを再描画するメソッドです。このメソッドは直接使用することは非推奨であり、動作が期待と異なる場合のみオーバーライドして処理を追加する使い方が推奨されています。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index