如何检测UIImageView的图像是否已更改

Bal*_*cze 4 uiimageview uiactivityindicatorview ios

我有一个应用程序,用户可以从相机胶卷中选择一个图像,然后将该图像加载到一个UIImageView.但是,如果图像很大,则会出现延迟,直到所选图像实际出现在UIImageView(设置图像未执行,main thread因此UI不会被冻结).在设置图像之前,我想显示一个活动指示器,通知用户应用程序没有冻结,只是加载图像.但是,我不知道如何检测图像何时被设置UIImageView为隐藏活动指示器.我猜也许KVO可以在这里提供帮助,但我不确定如何正确实施它.

抱歉,这个菜鸟问题!:)

lib*_*bec 12

如果你正在使用swift,你也可以创建UIImageView子类和覆盖image属性来观察值didSet.只记得设置超类的图像.

class ImageView: UIImageView {
    override var image: UIImage? {
        didSet {
            super.image = image
            println("Image Set")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Har*_*war 2

使用 KVO 观察 UIImageView 图像属性。添加代码以停止旋转器代替 NSLog(@"imageReady");。

@implementation ViewController {
   __weak IBOutlet UIImageView *_imageView;
}

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.
   [_imageView addObserver:self forKeyPath:@"image" options:NSKeyValueObservingOptionNew context:NULL];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
  if ([keyPath isEqualToString:@"image"]) {
     //Image ready
     //Stop loading spinner.
     NSLog(@"imageReady");
  }
}
Run Code Online (Sandbox Code Playgroud)