【发布时间】:2012-02-25 16:49:47
【问题描述】:
我有一个由UIScrollView 组成的自定义地图视图。滚动视图的子视图由CATiledLayer 支持。在这里一切都很好。平移和缩放会加载新的地图图块,一切都运行良好。
我想要做的是捕捉动画视频帧到这个滚动视图。本质上,我想为滚动视图的contentOffset 和zoomScale 创建动画更改视频。
我知道这个概念是合理的,因为我可以使用私有 API 函数 UIGetScreenImage() 以例如 10fps 的速度捕获应用程序的屏幕,组合这些图像,我可以得到流畅的播放动画并使用时序曲线通过滚动视图动画。
当然,我的问题是我不能使用私有 API。通过 Apple here 概述的替代方案,我得到了一个几乎可以说是有效的选择:询问 CALayer 到 renderInContext 并从中获取 UIGraphicsGetImageFromCurrentImageContext()。
不过,这似乎不适用于 CATiledLayer 支持的视图。捕获的是块状、未缩放的图像,就好像从未加载更高分辨率的图块一样。这在一定程度上是有道理的,因为CATiledLayer 会在后台线程中获取性能并且从主线程调用renderInContext 可能无法捕获这些更新。即使我也渲染了平铺层的presentationLayer,结果也是相似的。
在包含滚动视图的动画过程中,是否有 Apple 认可的方法来捕获支持 CATiledLayer 的视图的图像?或者在任何时候,就此而言?
【问题讨论】:
-
有人在这里发布了答案:stackoverflow.com/questions/5526545/…
标签: objective-c uiscrollview calayer catiledlayer