-1

我创建了一个简单UIActivityIndicatorView的方法来通知用户特定任务的执行结束。我的实现如下:

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
spinner.center = self.imageView.center;
[self.imageView addSubview:spinner];
[spinner startAnimating];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    UIImage *filteredImage = ...some filtering...;
    self.imageView.image = filteredImage;
    [self.imageView setNeedsDisplay];

    dispatch_async(dispatch_get_main_queue(), ^{
        [spinner stopAnimating];
    });

});

但是,当我运行应用程序时,旋转的轮子消失了,过了一会儿,图像更新了。您对这种延迟有何暗示?

编辑:setNeedsDisplaystopAnimating指令以正确的顺序调用。但是,UIImageView需要一段时间才能更新其内容。

先感谢您。

4

1 回答 1

0

您的代码的问题是-您试图在其他线程而不是主线程(GUI 线程)上的 imageview 上分配图像,因此需要时间。

为了解决这个问题,我对您的代码进行了一些更改-

而不是使用这个-

    UIImage *filteredImage = ...some filtering...;
    self.imageView.image = filteredImage;
    [self.imageView setNeedsDisplay];

尝试这个-

self.imageView.image = filteredImage;
dispatch_async(dispatch_get_main_queue(), ^{

        self.imageView.image = filteredImage;
        [self.imageView setNeedsDisplay];
    });

我也遇到过这个问题,希望对你有帮助。

于 2013-09-10T11:55:07.097 回答