UIViewで移動やサイズ変更された時に知る方法を探しています。
iOS 5.0 Xcode4.3 以降対応を基本に考えています。
特定のUIViewのプロパティのframeやcenterが変更されたら知りたいのです。
(実際に表示されていない時は知れなくても良いのですが、、)
UIViewの派生クラス(AViewとします)を作ってその中で、AViewが移動やサイズ変更された時AViewの兄弟のBViewの位置やサイズをコントロールしたいのです。
BViewはAViewのプロパティ等で記憶しようと思っています。
色々ググってみましたが、、見つけられませんでした。
ご存じの方よろしくお願いします。
iOSでUIViewで移動やサイズ変更された時に知る方法
Re: iOSでUIViewで移動やサイズ変更された時に知る方法
補足説明です。
MFCでいう、
CWnd::OnMove
CWnd::OnMoving
CWnd::OnSize
CWnd::OnSizing
みたいな物があるかと思ったのですが見つけられなかったです。
MFCでいう、
CWnd::OnMove
CWnd::OnMoving
CWnd::OnSize
CWnd::OnSizing
みたいな物があるかと思ったのですが見つけられなかったです。
Re: iOSでUIViewで移動やサイズ変更された時に知る方法
詳しくは知りませんが以下のlayoutセクションで、sizeThatFits、layoutSubviews、didAddSubview、willRemoveSubview、willMoveToSuperview、didMoveToSuperview、willMoveToWindow、didMoveToWindowが挙げられています。obott さんが書きました:補足説明です。
MFCでいう、
CWnd::OnMove
CWnd::OnMoving
CWnd::OnSize
CWnd::OnSizing
みたいな物があるかと思ったのですが見つけられなかったです。
これらのメソッドをオーバーライドしてみたらいかがでしょうか。
(見当はずれでしたらすみません)
UIView Class Reference
written by へにっくす
Re: iOSでUIViewで移動やサイズ変更された時に知る方法
実は確認済みだったのですが明記してませんでした。へにっくす さんが書きました: 詳しくは知りませんが以下の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は何らかの設定をすると呼ばれるのかなと思いますが、、、、、、、
↑の関数はなにか設定で目的に合致するように成るのかなと思ったので確認済みだと明記しなかったのです。
Re: iOSでUIViewで移動やサイズ変更された時に知る方法
プロパティの変更を監視する場合は Key Value Observing という方法があるみたいです。
https://developer.apple.com/library/mac ... rving.html
https://developer.apple.com/library/mac ... rving.html
Re: iOSでUIViewで移動やサイズ変更された時に知る方法
h2so5 さん ありがとうございます。h2so5 さんが書きました:プロパティの変更を監視する場合は Key Value Observing という方法があるみたいです。
おかげさまで
が出来る様になりました。AViewが移動やサイズ変更された時AViewの兄弟のBViewの位置やサイズをコントロールしたいのです。
[self addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
[self addObserver:self forKeyPath:@"center" options:NSKeyValueObservingOptionNew context:nil];
当然と言えば当然かもしれませんが、、、
Animation中はプロパティそのものが変化しているのでは無い様で通知は来ないみたいです。