17

有没有办法在 UIImageView.image 属性上设置观察者,以便我可以在属性更改时收到通知?也许与 NSNotification?我该怎么做呢?

我有大量的 UIImageViews,所以我还需要知道更改发生在哪一个上。

我该怎么做呢?谢谢。

4

2 回答 2

22

这称为键值观察。可以观察到任何符合键值编码的对象,这包括具有属性的对象。阅读本编程指南,了解 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 回答
0

在 Swift 中,使用KVO。例如

imageView.observe(\.image, options: [.new]) { [weak self] (object, change) in
            // do something with image
        }

更多讨论如何在 Swift iOS 中检测 UIImageView 中的更改图像

于 2022-02-16T01:03:38.593 回答