有翻页类型的应用程序,需要非常快速地将全屏 UIWebView 的内容转换为 UIImage(例如 200 毫秒)。为了速度而牺牲质量是可以的。在 iPad3 视网膜上接近这个位置真的很难。
创建一个 UIImage 我正在做常见的 renderInContext 方法:
UIGraphicsBeginImageContextWithOptions(frame.size, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
在 ipad3 视网膜显示器上,我通常会看到 400-500 毫秒。有趣的是,该方法第二次运行时要快得多(大约 100 毫秒),这无济于事,但表明正在发生某种缓存。
我尝试了以下事情:
我尝试过使用 UIGraphicsBeginImageContextWithOptions 的比例和不透明参数来进行可能的组合。将比例设置为 0.5 或 1.0 实际上会使它变得更慢。
添加 CGContextSetInterpolationQuality(context, kCGInterpolationNone)。性能没有变化。
webview.shouldRasterize=YES。性能没有变化。
将 UIWebView 缩小一半,然后缩放到 fullscreen 。这确实有帮助,但仍然在 300 毫秒左右。
还有其他想法吗?在 ipad1-2 上运行它是可以的 - 但 ipad3 视网膜只会扼杀性能。