由于我必须在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,一个用作占位符(UIActivityIndicatorView运行的地方),另一个用于绘制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。可能是因为它在后台运行?
答案 0 :(得分:1)
你不能这样做:当你的drawRect
正在执行时,屏幕上不可能有其他更新;旋转齿轮不会有机会被绘制或更新。
如果您的drawRect
需要几秒钟,您应该重新考虑您的策略:也许您可以在绘制到内存中位图的函数中隔离绘图密集型代码,显示UIImageView
由drawRect
代码绘制的占位符图像,在后台线程中进行渲染,并将UIImageView
的图像替换为代码所绘制的图像。