Я могу предложить 3 разных способа, 2 из которых вы уже упомянули:
- Создание пользовательского UIView.
- Рисование в CGLayer.
- загрузка из PDF.
У каждого есть свои преимущества, в зависимости от того, что вы хотите сделать:
UIView vs CGLayer
С точки зрения производительности (для одноразового рисования) и простоты использования между ними не должно быть большой разницы (есть незначительные различия, но ничего серьезного). Очевидно, Opacity может экспортировать исходный код для обоих (я лично не использовал его). Тем не менее, есть вещи, которые вы должны рассмотреть, прежде чем выбрать:
- Если у вас фиксированное изображение (о чем ваш вопрос говорит), используйте CGLayer. Объекты CGLayer будут кэшироваться на графическом устройстве, поэтому их повторное использование намного быстрее. Даже если кэш очищен, вы все равно используете тот же объект для перерисовки, что означает, что вам не нужно его заново создавать.
- С другой стороны, если вам нужно изменить чертеж, когда пользователь взаимодействует с приложением, UIView может быть быстрее, поскольку у вас есть возможность обновлять только одну часть изображения вместо весь вид.
- CGLayer не зависит от пользовательского интерфейса. Так что тот же код отлично работает для Mac / iPhone / iPad или даже для сохранения в файлы.
Заключение : Используйте CGLayer, если это не особый случай.
CGLayer (при рисовании кода) и PDF (загрузка из файла)
У меня нет никакого эталона для этого, но я ожидаю, что CGLayer будет немного быстрее: (1) нет необходимости читать файл. (2) команды pdf должны быть преобразованы в графические элементы системы, что более или менее похоже на создание CGLayer. (3) Я не уверен в том, как кэшируются страницы PDF, но я не ожидаю, что это будет быстрее, чем CGLayer. В любом случае, все это не должно иметь большого значения, если вы не хотите оптимизировать до последнего миллисекунды. Опять же, выбор должен основываться на вашем случае использования:
- CGLayer дает вам больше гибкости в коде . Ваш единственный доступ к PDF-странице - через
CGContextDrawPDFPage
, что означает, что даже простые задачи, такие как масштабирование / преобразование чертежа, будут сложнее.
- С другой стороны, использование PDF-файлов более гибко после завершения кода . Вы можете просто обновить PDF-файл новым файлом в любое время, загрузить его из Интернета и т. Д.
- Создание PDF может быть проще, чем кодирование чертежа. Вы можете использовать любое приложение, которое вам нужно, вам не нужно беспокоиться об API и системных ресурсах. В конце концов, код может выводить файл PDF, а не наоборот.
Заключение : Если вам не нужно много делать с чертежом (просто хотите показать значок или что-то еще), перейдите к PDF. если вам нужно поработать над этим в приложении, рассмотрите CGLayer.
Конечно, вы всегда можете смешивать подходы так, как считаете нужным: например, Загрузите файл PDF, поместите его в CGLayer, чтобы настроить его, нарисуйте его с помощью UIView, где вы можете поместить значок на него!