jfi*_*isk 3 quartz-2d grand-central-dispatch ios ios5
我想移动一些代码,需要几秒钟才能在另一个线程上生成UIImage,但是在使用时会出现上下文错误
UIGraphicsBeginImageContextWithOptions(size,false,0);
Run Code Online (Sandbox Code Playgroud)
在调用调度之前,为我尝试做的每个操作生成说"无效上下文0x0"的图像.这是可能吗?
rob*_*off 13
- 在UIKit中绘制图形上下文现在是线程安全的.特别:
- 用于访问和操作图形上下文的例程现在可以正确处理驻留在不同线程上的上下文.
- 字符串和图像绘制现在是线程安全的.
- 现在可以安全地使用多个线程中的颜色和字体对象.
听起来你尝试过这样的事情:
UIGraphicsBeginImageContextWithOptions(size,false,0);
dispatch_async(someQueue, ^{
[UIColor.whiteColor setFill];
UIRectFill(0, 0, 20, 20);
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.imageView.image = image;
});
};
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为每个线程都有自己的图形上下文堆栈(从iOS 4.0开始).你需要这样做:
dispatch_async(someQueue, ^{
UIGraphicsBeginImageContextWithOptions(size,false,0);
[UIColor.whiteColor setFill];
UIRectFill(0, 0, 20, 20);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
};
Run Code Online (Sandbox Code Playgroud)
该文件对UIGraphicsBeginImageContextWithOptions其他UIKit的图形功能和现在说
在iOS 4及更高版本中,您可以从应用程序的任何线程调用此函数.
该文档的UIColor说
颜色对象是不可变的,因此可以安全地从应用程序中的多个线程中使用它们.
该文档的UIFont说
字体对象是不可变的,因此可以安全地从应用程序中的多个线程中使用它们.
但是,UIKit -drawing添加的文档NSString说
必须在应用程序的主线程中使用此类扩展中描述的方法.
所以你不能尝试像[@"hello" drawAtPoint:CGPointZero withAttributes:attrs]后台线程那样的东西.
| 归档时间: |
|
| 查看次数: |
2825 次 |
| 最近记录: |