我正在使用以下代码在用户点按操作上截取应用程序窗口的屏幕截图:
UIGraphicsBeginImageContextWithOptions(self.view.window.bounds.size, self.view.opaque, 0.0);
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
CGImageRef imageRef = CGImageCreateWithImageInRect([UIGraphicsGetImageFromCurrentImageContext() CGImage], CGRectMake(0, 0, 640, self.view.window.layer.frame.size.height *2));
- 在imageContext
-
myImage = UIGraphicsGetImageFromCurrentImageContext();
现在,屏幕截图很好,但渲染它所花费的时间非常难以忍受。我需要在用户点击时立即呈现动画,但在截屏图像存储在myImage
之前我无法开始动画。
是否有一种快速的方法可以做到这一点,就像Facebook在墙上(当图像浏览器打开时),或者他们是否正在使用其他技术?
答案 0 :(得分:1)
我设法通过在后台和主线程之间分配任务来加快这个过程。
我在后台线程dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//code
});
执行了以下任务:
CGImageContext
CGImageRef
renderInContext
UIImage
传递给selector
,进一步将图片设置为我想要的变量(在我的情况下为UIImageView
)。在屏蔽结束时调用的selector
中,我使用UIImageView
将图像设置为dispatch_async(dispatch_get_main_queue(), ^{
//code
});