如何从后台任务添加和重绘CALayer?

时间:2015-11-10 07:01:19

标签: ios multithreading swift calayer

  • 我有一个UIView“myuiview”。
  • 我在该视图中添加了一些CALayers。在我的样本中,它只是一个“calayer”
  • 在后台任务中,我正在创建一个复杂的形状并将其添加到calayer中。
  • 在主线程中,我刷新了calayer并希望在屏幕上看到新的形状。

只有在移动屏幕并调用CGAffineTransformTranslate(myuiview,x,y)后才会显示新形状;

我做错了什么?

dispatch_async(backgroundQueue, {

    var calayer:CALayer=CALayer();  
    myuiview.layer.addSublayer(calayer);
    myshape=createShape(); // takes long, thats why in the background.

    dispatch_async(dispatch_get_main_queue()) {
        calayer.addSublayer(myshape)
        calayer.setNeedsDisplay(); // No update on the screen !!!!
    }
})

1 个答案:

答案 0 :(得分:0)

似乎问题是因为您从非主线程管理层次结构。在调度主队列块中移动相关代码,它应该工作。要处理性能,您可以在离线位图上下文中的非主线程中执行渲染,生成CGImage并将其作为内容提供给主线程中的图层