1

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

我尝试过这样的事情,但它不起作用。

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

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

     [self.activityIndicatorView startAnimating];
}

如何在绘图时显示纺车?


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

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

如此所述,Renderer 类编写了一个 UIImage。完成占位符后将drawrect调用放在另一个队列(背景)中可以使用要显示的图像。

那是代码:

dispatch_queue_t myQueue = dispatch_queue_create("MyQ​​ueue", 0);

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

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

我仍然不明白为什么我必须直接调用 drawRect 函数,而不是 setNeedDisplay。可能是因为它在后台运行?

4

1 回答 1

1

你不能这样做:在你drawRect的执行过程中,不能对屏幕进行其他更新;旋转齿轮将没有机会被绘制或更新。

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

于 2012-09-04T20:29:33.323 回答