UIActivityIndi​​catorView在执行UIView的drawrect函数时

时间:2012-09-04 20:12:25

标签: ios uiview drawrect uiactivityindicatorview

由于我必须在UIview中绘制很多点,我想在UIView上显示活动指示器视图。

我试过这样的事,但它没有用。

-(void) drawRect:(CGRect)rect
{
     [self.activityIndicatorView startAnimating];

     CGContextRef cr = UIGraphicsGetCurrentContext();
     // Lots of CG functions (take a few seconds)

     [self.activityIndicatorView startAnimating];
}

绘画时如何显示旋转轮?


使用解决方案进行编辑(感谢@dasblinkenlight):

两个UIImageViews,一个用作占位符(UIActivityIndi​​catorView运行的地方),另一个用于绘制CG内容,名为Renderer。

读取here时,Renderer类会写一个UIImage。完成占位符后,将直接调用放在另一个队列(背景)中可以使用图像显示。

代码:

  

dispatch_queue_t myQueue = dispatch_queue_create(" MyQueue",0);

dispatch_async(myQueue, ^{
    [self.renderer drawRect:self.placeholder.bounds];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.placeholder setImage:[self.renderer renderedImage]];
    });
});

我无法理解为什么我必须直接调用drawRect函数,而不是setNeedDisplay。可能是因为它在后台运行?

1 个答案:

答案 0 :(得分:1)

你不能这样做:当你的drawRect正在执行时,屏幕上不可能有其他更新;旋转齿轮不会有机会被绘制或更新。

如果您的drawRect需要几秒钟,您应该重新考虑您的策略:也许您可以在绘制到内存中位图的函数中隔离绘图密集型代码,显示UIImageViewdrawRect代码绘制的占位符图像,在后台线程中进行渲染,并将UIImageView的图像替换为代码所绘制的图像。