Есть ли способ получить уведомление, когда меняет свойство UIImageView.image?

Есть ли способ установить наблюдателя в свойстве UIImageView.image, поэтому я могу получить уведомление о том, когда свойство было изменено? Возможно, с NSNotification? Как я могу это сделать?

У меня есть большое количество UIImageViews, поэтому мне нужно знать, в каком из них произошло изменение.

Как мне это сделать? Спасибо.

Ответы

Ответ 1

Это называется наблюдением за ключевыми значениями. Любой объект, совместимый с кодировкой по ключевым значениям, может быть замечен, и это включает объекты со свойствами. Прочитайте это руководство по программированию о том, как работает 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
    }
}