需要在iOS中处理大型矢量图形的建议

时间:2011-10-07 02:02:49

标签: objective-c ios svg

我有一个需要渲染大型SVG文件的项目。到目前为止,我一直在使用UIWebView,它可以工作,但渲染时间可能超过10秒。在旧设备上,应用程序内存不足。

我想出了几种可能的解决方案:

  • 使用CATiledLayer(但我找不到用svg做任何方法)
  • 首先对SVG进行栅格化,将它们拆分,然后使用平铺图层(虽然第一次运行时会非常慢)
  • 使用PDF代替(虽然我不确定这对所有wth矢量是否有帮助 - 有经验的人吗?)

SVG是在服务器端生成的,所以我也可以接受这方面的建议(即改变格式)

我很欣赏那些在选择前进方面有这方面经验的人的一些指示。你真诚的感谢!

3 个答案:

答案 0 :(得分:2)

好!经过多次试验和错误后,我相信我在iOS中拥有大量SVG的平滑滚动视图。

基本上,您需要将svg切割成tile并使用UIWebViews在UIScrollView中渲染它们。

确保从主线程异步加载切片,这可能很棘手,因为您无法从后台线程向UIWebView执行操作。如果您尝试在scrollviewdidscroll中加载图块,则会遇到波动的帧速率。

此外,您可能希望在UIWebViews中使用一个小的重置css来摆脱瓷砖周围的丑陋填充。

* {
 margin:0;
 padding:0;
}

为我做了。

答案 1 :(得分:0)

PDF是Adobe Illustrator的原生格式,在iOS上得到很好的支持,因此它绝对是矢量图形的一个选项。渲染复杂的矢量图形总是非常耗费CPU,因此您必须尝试找出更快的内容。鉴于iOS上的PDF堆栈比WebKit中的SVG支持要成熟得多,我猜它可能会更快,但它在很大程度上取决于您的输入文件。你可以查看Apple的ZoomingPDFViewer sample code,它使用CATiledLayer和PDF来开始。

答案 2 :(得分:0)

我编写了一个可以处理Inkscape无法处理的大型SVG文件的系统。 它将SVG转换为JavaScript和HTML。 公共版本在比我的开发环境慢的Web服务器上运行。 我想测试你所谓的大型SVG。如果它工作,它将使用JavaScript和HTML创建SVG,并将修改SVG,以便用户可以看到它正在构建。 您是否有可能发送中型和大型SVG,以便我可以尝试在开发和测试中进行转换?

借口拼写 - ipod