即使主线程被阻止,AVCaptureVideoPreviewLayer的实例也会继续从视频捕获流中更新其内容。是否有可能通常使用CALayer
的自定义子类复制此行为?换句话说,给定原始图像数据,我们可以更新主线程被阻止时在屏幕上显示的内容吗?
答案 0 :(得分:3)
主线程被阻止时,您无法更新视图中的任何内容。整个UIKit是单线程的,并在主事件循环上运行。视频捕获是一种特殊情况,因为它直接绘制到屏幕缓冲区,但您无法自己复制它。
此外,如果您在主线程上执行长时间运行的任务,iOS将假设您的应用已经崩溃并在几秒钟后终止它。
为什么不在后台线程上执行其他任务呢?这是标准做法。
答案 1 :(得分:0)
我找到了一种在非UI-Thread上更新UI的方法。 我们可以在任何线程中执行代码,即使主线程处于休眠状态,它实际上也会更改图层的转换。
self.labelLayer.transform = CATransform3DMakeScale(1.2, 1.2, 1.0);
所以,如果有人能够解释这一点,请随时联系我!