Objective-C 値を追跡する

公開: 2015-04-28 22:18
更新: 2016-04-29 06:03

どうもあっきぃです。

追いかけるよりは逃げる方が好きです。


そこで今日はObserver(観測者)を使ってプロパティの値を追跡します。

こんな感じで観測者を追加します。

[self.view addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];

この例では、UIViewControllerの.viewのframeの値を追跡します。

受け取りはaddObserver:で指定したインスタンス内のこの関数が呼ばれます。

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
        //判定
        if([object isEqual:self.view] && [keyPath isEqualToString:@"frame"]) {
                NSLog(@"%@", change);
        }
}

結果はこんな感じ

frameの値が変わる度に呼ばれます。

2015-04-28 21:52:17.556 app[11181:1165219] {
        kind = 1;
        new = "NSRect: {{0, 0}, {320, 568}}";
}

観測者を消す場合はこうします。

[self.view removeObserver:self forKeyPath:@"frame"];

簡単ですね。


もしも、blocksを使用しているならこんな感じ。

//追加
[self.view bk_addObserverForKeyPath:@"frame" identifier:@"frameObserver" options:NSKeyValueObservingOptionNew task:^(id obj, NSDictionary *change) {
        NSLog(@"%@", change);
}];

//削除
[self.view bk_removeObserversWithIdentifier:@"frameObserver"];

blockのIDを振る必要があります。

(省略もできるけど)



以上です。



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。