在后台线程上渲染UIVIew到图像的安全方法?

Mar*_*ski 8 multithreading uiview ios

我正在创建小磁贴图像以存储在磁盘上并显示给用户.这是我目前执行此操作的过程:

  1. 创建一个viewcontroller,表示我想在屏幕上显示的UI
  2. 从viewcontroller获取视图并从中渲染图像
  3. 将其保存到磁盘并稍后在屏幕上显示

当我尝试访问viewcontroller的视图时,我崩溃了.当我尝试在线研究时,我在后台创建视图是否安全时遇到了相互矛盾的结果.我正在读UIGraphicsGetCurrentContext调用应该是线程安全的,但也许不能在后台线程上访问UIView?我正在为iOS 4及更高版本编写应用程序.这是我正在使用的代码(tile是viewcontroller):

CGSize size = CGSizeMake(20.0f, 30.0f);
UIGraphicsBeginImageContext(size);
[tile.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();           
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

尝试访问磁贴上的.view属性(EXC_BAD_ACCESS)时发生崩溃.重点是在后台渲染视图以防止锁定UI,因为有很多要处理的切片.

有安全的方法吗?

Pie*_*ter 2

我从来没有尝试过你所描述的,而且我不喜欢成为坏消息的携带者,而是取自苹果的文档

\n\n
\n

注意:在大多数情况下,UIKit 类只能在应用程序 xe2x80x99 的主线​​程中使用。对于从 UIResponder 派生的类或涉及以任何方式操作应用程序 xe2x80x99 用户界面的类来说尤其如此。

\n
\n\n

当然,他们方便地说“大部分”,这样就留下了一些回旋余地。

\n

  • @MarkStruzinski 您是否曾想出一种可靠的解决方法,可以在不占用 UI 的情况下将图层渲染到背景图像? (8认同)