2019.05.06SwiftのUIViewクラスには、自身の位置や大きさを情報としてもつプロパティが2つあります。frameプロパティとboundsプロパティです。これらは、どちらかが変更されるともう一方も合わせて変更されるようになっています。参考書籍frameプロパティとboundsプロパティの違いframeプロパティはそのUIViewの親UIViewにおけるローカル座標系での、自身の矩形のCGRect表現を示します。boundsはそのUIView自身におけるローカル座標系での自身の矩形のCGRect表現を示します。CGSize)}からわかるように、CGPoint型のoriginとCGSize型のsizeをプロパティとして持つようになっています。originで自身の矩形の左上の頂点の位置を指定し、sizeで矩形の大きさを指定します。CGFloat)}のようにx,yというCGFloat型のプロパティをもち、この2つでxy平面上の座標を表します。CGFloat)}のようにwidth,heightというCGFloat型のプロパティをもち、この2つで大きさを表します。ちなみにCGRectはextensionされていて、origin・sizeを引数とするのではなく、x・y・width・heightを引数としても生成できます。上でも述べたように、frameプロパティとboundsプロパティはお互いの変化に合わせて自身の値も変更されます。当たり前のようですが、frameの変更はboundsのsizeにしか影響を与え得ません。frameのoriginが変更されても、UIViewは自身のローカル座標系ごと移動してしまうので、boundsのoriginは(0,0)のまま変化がないからです。frameのsizeが変更されると、その変更された大きさに合わせる形で、boundsのsizeも変化します。boundsを変更した時のframeの変化これは、origin,size両方に影響を与え得ます。boundsのsizeのみの変更frameのsizeがboundsのsizeに合わせて変化するboundsのoriginのみの変更frameのoriginがboundsのorigin変更によって移動した位置に合わせて変化するboundsのsize・originを両方変更frameのsize・originが両方変化する(矩形の中心から上下均等に変更される)ちなみに、frameの中心座標はcenterプロパティから参照可能です。(これもframeプロパティの変更に応じて変化します)centerプロパティを指定すると、指定した位置を中心にするように、大きさを保ったまま矩形を平行移動できます。親子関係を結んだUIViewの場合、親UIViewの変更が子UIViewに変化を与え得ます。簡単にわかるかと思いますが、ここで親のsizeの変更は特に子に変化を与えません。そのため、ここから親のoriginを変化させるという前提で話を進めます。親のframeを変化させるということは、そのまた親におけるローカル座標系において自身の矩形を変化させるということです。frameのoriginを変化させると、自身のローカル座標系の原点も共に変化し、画面上での位置が変わります。すると、子のframeは「親UIViewのローカル座標系におけるCGRect表現」だったので、変化した親のローカル座標系に応じて自身の画面上での位置も変化します。画面上での位置が変化しても、origin.x,origin.yの値は特に変わりません。子のframeが基準とする「親のローカル座標系」そのものが変化しているから画面上の位置が変わっただけであって、子の親との画面上での相対位置が変化したわけではないからです。親のboundsを変更すると、親UIView自身のローカル座標系における自身の矩形が変化します。上のframeを変更した場合と違い、自身のローカル座標系自体は変化しません。よって、親の画面上での位置が変化しても、子のframeが基準とする「親のローカル座標系」は変化していないので子の画面上での位置は変わりません。結果、子の親との画面上での相対位置が変化してしまいます。コピーut3をフォローするut3iOSも少々できるWebエンジニアut3をフォローするut3Utarog関連記事Programming【Python】コマンドライン引数を利用できるargparseの使い方argparseというPythonの標準モジュールがあります。これを使うとプログラムの実行時にコマンドライン引数を取ることができ、コマンドライン上での柔軟なプログラム実行が可能になります。p...Programmingswagger-mergerを使ってswaggerファイルを分割管理しようAPIの管理にswagger(現openapi3.0)を使用している組織は多いかと思います。そこでよく出てくる問題として、swagger(openapi)ファイルを長い間運用し続けていると、pathsやcomponentsが無制限に...Programming【Python】enumerate関数の使い方!アンパックとの組み合わせが便利pythonのenumerate関数って便利ですね。引数にシーケンスを指定すると、カウント(≒インデックス)と要素をまとめたタプルを返してくれます。...Angular【Angular】html文書をエスケープしないでそのままtemplateに表示するAngularなどのフロントエンドフレームワークでは、多くの場合HTMLを出力しようとすると自動で文字列にエスケープするセキュリティシステムが組み込まれています。これをサニタイジングといい、クロスサイトスクリプティング(XSS)対策のために...Excel【Excel】エクセルの外部参照をうまく使い、複数ファイルを1つにまとめる業務でエクセルをいじる機会があり、複数のファイルを1つにまとめる、という作業の効率化のためにいい感じの式を作りました。プログラミング、というほどでもないですがいい機会なのでまとめておきます。hookを仕込みpre-push時に強制的にmigrationを行うようにしてみました。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。【Swift】frameとboundsの違いは?UIViewにどう影響するのか【Swift】オプショナル型とは?4種類のアンラップ方法と共に解説!【Angular】html文書をエスケープしないでそのままtemplateに表示するアーカイブ2019年9月2019年5月2019年4月2019年3月2019年2月カテゴリーAngularAWSCSSDockerExcelJavaScriptMySQLPHPProgrammingPythonSwiftタイトルとURLをコピーしました。