[解決済み] convertRect:toView:、convertRect:FromView:、convertPoint:toView:、convertPoint:fromView:メソッドについて理解する。
質問
これらのメソッドの機能性を理解しようとしています。そのセマンティクスを理解するために、簡単なユースケースを提供していただけませんか?
ドキュメントから、例えば
convertPoint:fromView:
メソッドは次のように記述されています。
与えられたビューの座標系から、受信機の座標系に点を変換する。
は何をするのでしょうか? 座標系 の意味は?についてはどうですか? レシーバ ?
例えば
convertPoint:fromView:
のような使い方は意味があるのでしょうか?
CGPoint p = [view1 convertPoint:view1.center fromView:view1];
NSLogユーティリティを使用して、以下のことを確認しました。
p
の値と一致することを確認しました。
view1
の中心と一致する。
よろしくお願いします。
EDITです。 興味のある方のために、これらのメソッドを理解するための簡単なコードスニペットを作成しました。
UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 200)];
view1.backgroundColor = [UIColor redColor];
NSLog(@"view1 frame: %@", NSStringFromCGRect(view1.frame));
NSLog(@"view1 center: %@", NSStringFromCGPoint(view1.center));
CGPoint originInWindowCoordinates = [self.window convertPoint:view1.bounds.origin fromView:view1];
NSLog(@"convertPoint:fromView: %@", NSStringFromCGPoint(originInWindowCoordinates));
CGPoint originInView1Coordinates = [self.window convertPoint:view1.frame.origin toView:view1];
NSLog(@"convertPoint:toView: %@", NSStringFromCGPoint(originInView1Coordinates));
いずれの場合も
self.window
がレシーバです。しかし、違いがあります。最初のケースでは
convertPoint
パラメータで表現されるのは
view1
の座標で表される。出力は以下のようになる。
convertPoint:fromView: {100, 100}
2つ目では、代わりに
convertPoint
はスーパービューで表現されます (
self.window
) の座標で表現されます。出力は以下のようになります。
convertPoint:toView: {0, 0}
どのように解決するのですか?
各ビューは独自の座標系を持っています。原点は0,0、幅と高さがあります。これは
bounds
の矩形に記述されます。ビューの
frame
は、その原点をスーパービューの境界矩形内の点に持ちます。
ビュー階層の一番外側のビューは、iOSの画面の左上に対応する0,0を原点とします。
このビューに 20,30 でサブビューを追加すると、サブビューの 0,0 の点は、スーパービューの 20,30 の点に対応します。この変換が、それらのメソッドが行っていることです。
上の例は、ビューからそれ自身に点を変換しているので、無意味です(ダジャレではありません)。ビューが画面の外に移動しているかどうかをテストするために、ビューのある点がそのスーパー ビューに関連してどこにあるかを見つける方が一般的でしょう。
CGPoint originInSuperview = [superview convertPoint:CGPointZero fromView:subview];
receiver" は objective-c の標準的な用語で、メッセージを受け取るオブジェクトのことです(メソッドもメッセージと呼ばれます)ので、この例では receiver は
superview
.
関連
-
[解決済み] Cocoa:フレームとバウンドはどう違うの?
-
dyld: ライブラリがロードされていません。エラーの解決
-
[解決済み] 画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] CocoaPodsの最新バージョンにアップデートしますか?
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み】UIViewのフレーム、バウンド、センター
-
[解決済み] ナビゲーションバーの高さをプログラムで取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JenkinsがIOSを自動パッケージングしてモミを配布
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] テキストフィールドを移動する方法(次へボタン/完了ボタン)
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする
-
[解決済み] iOS: ある点が矩形の内側にあるかどうかを確認する