我的应用程序有一个“主”视图、一个自定义拇指棒控件和一些按钮。主视图上定义了一个额外的 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 的其余部分。