窗口截图花了太长时间

时间:2013-09-03 13:42:17

标签: iphone ios

我正在使用以下代码在用户点按操作上截取应用程序窗口的屏幕截图:

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在墙上(当图像浏览器打开时),或者他们是否正在使用其他技术?

1 个答案:

答案 0 :(得分:1)

我设法通过在后台和主线程之间分配任务来加快这个过程。

我在后台线程dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //code });执行了以下任务:

  • 开始CGImageContext
  • 创建CGImageRef
  • 使用renderInContext
  • 创建屏幕截图
  • 在imageRef上执行操作。
  • 将最终的UIImage传递给selector,进一步将图片设置为我想要的变量(在我的情况下为UIImageView)。
  • 结束并释放图形上下文。

在屏蔽结束时调用的selector中,我使用UIImageView将图像设置为dispatch_async(dispatch_get_main_queue(), ^{ //code
});