iOSでUIViewで移動やサイズ変更された時に知る方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
obott
記事: 17
登録日時: 14年前

iOSでUIViewで移動やサイズ変更された時に知る方法

#1

投稿記事 by obott » 12年前

UIViewで移動やサイズ変更された時に知る方法を探しています。

iOS 5.0 Xcode4.3 以降対応を基本に考えています。

特定のUIViewのプロパティのframeやcenterが変更されたら知りたいのです。
(実際に表示されていない時は知れなくても良いのですが、、)

UIViewの派生クラス(AViewとします)を作ってその中で、AViewが移動やサイズ変更された時AViewの兄弟のBViewの位置やサイズをコントロールしたいのです。
BViewはAViewのプロパティ等で記憶しようと思っています。

色々ググってみましたが、、見つけられませんでした。

ご存じの方よろしくお願いします。

obott
記事: 17
登録日時: 14年前

Re: iOSでUIViewで移動やサイズ変更された時に知る方法

#2

投稿記事 by obott » 12年前

補足説明です。
MFCでいう、
CWnd::OnMove
CWnd::OnMoving
CWnd::OnSize
CWnd::OnSizing
みたいな物があるかと思ったのですが見つけられなかったです。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: iOSでUIViewで移動やサイズ変更された時に知る方法

#3

投稿記事 by へにっくす » 12年前

obott さんが書きました:補足説明です。
MFCでいう、
CWnd::OnMove
CWnd::OnMoving
CWnd::OnSize
CWnd::OnSizing
みたいな物があるかと思ったのですが見つけられなかったです。
詳しくは知りませんが以下のlayoutセクションで、sizeThatFits、layoutSubviews、didAddSubview、willRemoveSubview、willMoveToSuperview、didMoveToSuperview、willMoveToWindow、didMoveToWindowが挙げられています。
これらのメソッドをオーバーライドしてみたらいかがでしょうか。
(見当はずれでしたらすみません)
UIView Class Reference
written by へにっくす

obott
記事: 17
登録日時: 14年前

Re: iOSでUIViewで移動やサイズ変更された時に知る方法

#4

投稿記事 by obott » 12年前

へにっくす さんが書きました: 詳しくは知りませんが以下のlayoutセクションで、sizeThatFits、layoutSubviews、didAddSubview、willRemoveSubview、willMoveToSuperview、didMoveToSuperview、willMoveToWindow、didMoveToWindowが挙げられています。
実は確認済みだったのですが明記してませんでした。
UIViewの派生クラス(AViewとします)のソースでそれらの関数をオーバーライドして各関数の中でブレークを掛けて、、実行してみました。

willMoveToSuperviewとdidMoveToSuperviewとwillMoveToWindowとdidMoveToWindowとかは最初の親ビューへの登録か表示時には呼ばれました。

しかし肝心の、、、、、、
AView.frame = CGRecyMake( 0, 0, 100, 200 );
AView.center = CGPointMake( 50, 80 );
等の所ではブレークしませんでした。


sizeToFitsとsizeThatFitsは何らかの設定をすると呼ばれるのかなと思いますが、、、、、、、
↑の関数はなにか設定で目的に合致するように成るのかなと思ったので確認済みだと明記しなかったのです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: iOSでUIViewで移動やサイズ変更された時に知る方法

#5

投稿記事 by h2so5 » 12年前

プロパティの変更を監視する場合は Key Value Observing という方法があるみたいです。
https://developer.apple.com/library/mac ... rving.html

obott
記事: 17
登録日時: 14年前

Re: iOSでUIViewで移動やサイズ変更された時に知る方法

#6

投稿記事 by obott » 12年前

h2so5 さんが書きました:プロパティの変更を監視する場合は Key Value Observing という方法があるみたいです。
h2so5 さん ありがとうございます。

おかげさまで
AViewが移動やサイズ変更された時AViewの兄弟のBViewの位置やサイズをコントロールしたいのです。
が出来る様になりました。

コード:

	[self addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
	[self addObserver:self forKeyPath:@"center" options:NSKeyValueObservingOptionNew context:nil];
AViewのソースで上記の様にプロパティ変更時に通知が来る様にセット出来ました。
当然と言えば当然かもしれませんが、、、
Animation中はプロパティそのものが変化しているのでは無い様で通知は来ないみたいです。

閉鎖

“C言語何でも質問掲示板” へ戻る