17

プロパティが変更されたときに通知を受け取ることができるように、UIImageView.image プロパティにオブザーバーを設定する方法はありますか? おそらくNSNotificationで?どうすればこれを行うことができますか?

私は多数の UIImageView を持っているので、変更が発生したものも知る必要があります。

どうすればいいですか?ありがとう。

4

2 に答える 2

22

これは Key-Value Observing と呼ばれます。Key-Value Coding に準拠したオブジェクトはすべて観察でき、これにはプロパティを持つオブジェクトが含まれます。KVO の仕組みと使用方法については、このプログラミング ガイドをお読みください。以下に短い例を示します (免責事項: 動作しない可能性があります)。

- (id) init
{
    self = [super init];
    if (!self) return nil;

    // imageView is a UIImageView
    [imageView addObserver:self
                forKeyPath:@"image"
                   options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                   context:NULL];

    return self;
}

- (void) observeValueForKeyPath:(NSString *)path ofObject:(id) object change:(NSDictionary *) change context:(void *)context
{
    // this method is used for all observations, so you need to make sure
    // you are responding to the right one.
    if (object == imageView && [path isEqualToString:@"image"])
    {
        UIImage *newImage = [change objectForKey:NSKeyValueChangeNewKey];
        UIImage *oldImage = [change objectForKey:NSKeyValueChangeOldKey];

        // oldImage is the image *before* the property changed
        // newImage is the image *after* the property changed
    }
}
于 2012-05-09T01:00:47.297 に答える