iOS でのキー値の監視を理解しようとしていますが、何かが正しく行われていないと思います。アイデアとして、View Controller のプロパティ (IBOutlet に接続されたビュー) にオブザーバーを追加しようとしました。このビュー (tableIndicator) はアニメーション化されているため、ビューのフレームが変化したときにオブザーバーが反応するかどうかを確認したかったのです。
そこで、View Controller の viewDidLoad 内で次のことを行いました。
[tableInidicator addObserver:self forKeyPath:@"frame" options:0 context:nil];
tableIndicator
は私のビュー/クラス プロパティです。ビュー コントローラー (self) をオブザーバーとして追加し、デフォルト オプションとして 0 を追加し、観察されるキー値としてフレームを追加します。
次に、フレームが変化したときにこの関数がトリガーされるかどうかを確認するのを待っています。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"value changed");
}
...しかし、何も起こりません。
このコードは、私が理解する以外の目的には役立たないため、必ずしもこのコードの修正を探しているわけではありません。誰かが私が間違っていることを指摘してくれたら本当にありがたいです。いくつかの良い例/チュートリアルも素晴らしいでしょう.
私が見つけたもの ( http://iphonedevelopment.blogspot.ro/2009/02/kvo-and-iphone-sdk.html / http://nachbaur.com/blog/back-to-basics-using-kvo ) はそのような場合は対象外です。それらは、クラス内の (カスタム) オブジェクトのプロパティではなく、そのプロパティの 1 つを監視するためにクラスに適用されるオブザーバーにすぎませんでした。
前もって感謝します
[編集]受け入れられた回答に対する私のコメントを見逃す人のために:
ビューの中心を変更しても、フレーム プロパティのオブザーバーは明らかにトリガーされません。フレーム自体を変更する必要があります。