Laggy UI经常更新背景

时间:2012-04-11 21:52:12

标签: iphone ios multithreading core-animation quartz-graphics

我的应用程序有一个“主”视图,一个自定义拇指杆控件和一些按钮。主视图上定义了一个额外的CALayer,其内容不断更新为流式图像。一些代码:

设置CADisplay链接以重复调用我的绘制方法:

displayLink_ = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawSublayers)];
[displayLink_ setFrameInterval:2];
[displayLink_ addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

方法drawSublayers将CGImage绘制为

  CGImageRelease((__bridge CGImageRef) imageLayer_.contents);
  [imageLayer_ setContents:(id)self.cameraImage_.CGImage];

问题是拇指杆和其他控件都非常迟钝。这是因为背景图像的绘制占用了足够的处理器,使得mainRunLoop被拖下来而无法跟上。我读过的所有帖子都建议将任何UI更新移动到单独的线程都不起作用(独立测试已经确认了这一点 - 方法触发,但没有绘制)。

有什么想法吗?背景图像不是优先考虑的事项,即我不介意绘制它需要一些时间。我只是不希望它干扰UI的其余部分。

1 个答案:

答案 0 :(得分:2)

将绘图移离主线程。 performSelectorinBackground:

http://www.chrisumbel.com/article/asynchronous_iphone_nsthread_nstimer