Нужен совет по обработке большой векторной графики в iOS - PullRequest
3 голосов
/ 07 октября 2011

У меня есть проект, который требует рендеринга больших файлов SVG. До сих пор я использовал UIWebView, который работает, но на рендеринг может уйти до 10 секунд. На старых устройствах приложению просто не хватает памяти.

Я предложил несколько возможных решений:

  • Используйте CATiledLayer (но я не смог найти способ сделать это с svg)
  • Сначала растеризуйте SVG, разделите их, затем используйте плиточный слой (хотя это будет очень медленно при первом запуске)
  • Вместо этого используйте PDF (хотя я не уверен, поможет ли это вообще с вектором - кто-нибудь с опытом?)

SVG генерируются на стороне сервера, поэтому я также открыт для предложений в этой области (т. Е. Изменение форматов)

Буду признателен за советы от людей, которые имеют опыт в этой области при выборе пути продвижения вперед. Вы мне искреннее спасибо!

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Хорошо!После долгих проб и ошибок я считаю, что у меня есть плавное плавное прокручивание огромных SVG-файлов в iOS.

По сути, вам нужно разрезать svg на плитки и использовать UIWebViews для их рендеринга в UIScrollView.

Убедитесь, что вы загружаете плитки асинхронно из основного потока, что может быть сложно, потому что вы не можете делать что-то с UIWebView из фонового потока.Вы будете страдать от неустойчивой частоты кадров, если попытаетесь загрузить плитки в scrollviewdidscroll.

Кроме того, вы можете использовать небольшой сброс CSS в ваших UIWebViews, чтобы избавиться от уродливого заполнения вокруг ваших плиток.

* {
 margin:0;
 padding:0;
}

сделал это для меня.

0 голосов
/ 07 октября 2011

Я написал систему, которая может обрабатывать большие SVG-файлы, а Inkscape - нет.Он конвертирует SVG в JavaScript и HTML.Публичная версия работает на веб-сервере, который работает медленнее, чем моя среда разработки.Я хотел бы проверить, что вы называете большой SVG.Если он сработает, он создаст SVG в JavaScript и HTML и сделает SVG таким, чтобы пользователь мог видеть, как он создается.Возможно ли, что вы могли бы послать SVG среднего и большого размера, чтобы я мог попробовать конвертировать их как в dev, так и в test?

Excuse spelling-ipod

0 голосов
/ 07 октября 2011

PDF является нативным форматом Adobe Illustrator и хорошо поддерживается на iOS, поэтому, безусловно, это вариант для векторной графики.Рендеринг сложной векторной графики всегда сильно загружает процессор, поэтому вам придется экспериментировать, чтобы выяснить, что быстрее.Учитывая, что стек PDF в iOS гораздо более зрелый, чем поддержка SVG в WebKit, я бы предположил, что он может быть быстрее, но во многом зависит от ваших входных файлов.Вы можете проверить пример кода ZoomingPDFViewer от Apple, который использует CATiledLayer с PDF для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...