如何在主线程被阻止时更新CALayer的内容?

时间:2012-02-03 19:19:57

标签: objective-c ios calayer avcapturesession

即使主线程被阻止,AVCaptureVideoPreviewLayer的实例也会继续从视频捕获流中更新其内容。是否有可能通常使用CALayer的自定义子类复制此行为?换句话说,给定原始图像数据,我们可以更新主线程被阻止时在屏幕上显示的内容吗?

2 个答案:

答案 0 :(得分:3)

主线程被阻止时,您无法更新视图中的任何内容。整个UIKit是单线程的,并在主事件循环上运行。视频捕获是一种特殊情况,因为它直接绘制到屏幕缓冲区,但您无法自己复制它。

此外,如果您在主线程上执行长时间运行的任务,iOS将假设您的应用已经崩溃并在几秒钟后终止它。

为什么不在后台线程上执行其他任务呢?这是标准做法。

答案 1 :(得分:0)

我找到了一种在非UI-Thread上更新UI的方法。 我们可以在任何线程中执行代码,即使主线程处于休眠状态,它实际上也会更改图层的转换。

self.labelLayer.transform = CATransform3DMakeScale(1.2, 1.2, 1.0);

所以,如果有人能够解释这一点,请随时联系我!