【问题标题】:Delay between UIActivityIndicatorView animation stop and content view refreshUIActivityIndi​​catorView 动画停止和内容视图刷新之间的延迟
【发布时间】:2013-09-10 11:10:08
【问题描述】:

我创建了一个简单的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 需要一段时间才能更新其内容。

提前谢谢你。

【问题讨论】:

  • 您可以在 stopAnimating 行和 setNeedsDisplay 行的上方放置 log on,这样您就可以更好地了解首先记录的内容。
  • 顺序正确:在动画停止前调用setNeedsDisplay函数。但是,图像需要一段时间才能更新。
  • 不知道,但有 1 条建议,如果您想强制实现所需的输出,那么您可以延迟调用一个方法并将您的活动指示器停止;)

标签: iphone ios user-interface progress-bar delay


【解决方案1】:

您的代码的问题是- 您正在尝试在其他线程而不是主线程(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];
    });

我也遇到过,希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多