5 ответов:
как использовать векторы в Xcode (7 и 6,3+):
- Сохранить Изображение как .pdf файл с соответствующим размером @1x (например, 44x44 для кнопки панели инструментов).
- в своем картинки.xcassets.
теперь вы можете ссылаться на свое изображение по его имени, как и любой .png (например, если в iOS 9 Apple начинает требовать @ 4X активов, они будут просто работать), и у вас будет меньше файлов поддерживать.
- вы должны запросить все ваши активы в размере @1x, сохраненные в виде PDF-файлов. Среди прочего, это позволит UIImageViews иметь правильный внутренний контент размер.
почему это (вероятно) работает таким образом:
- это обратная совместимость С предыдущими версиями iOS.
- изменение размеров векторов может быть вычислительной интенсивной задачей во время выполнения; реализуя его таким образом,нет производительности.
Это дополнение к отличному ответу от @Senseful.
Как сделать векторные изображения в .формат pdf
Я расскажу, как это сделать в Inkscape, так как это бесплатно и с открытым исходным кодом, но другие программы должны быть похожи.
В Inkscape:
- создать новый проект.
- перейдите к файлу > свойства документа и установите пользовательский размер страницы на любой размер вашего @1x (44x44, 100x100 и т. д.) с единицами в ПХ.
- Сделайте ваше художественное произведение.
- перейти к файлу > Сохранить как... > Формат Документа Для Печати (*.pdf) > сохранить > ОК. (Кроме того, вы можете перейти в меню печать > печать в файл > формат вывода: PDF > печать, но вариантов не так много.)
Примечания:
- как указано в принятом ответе, вы не можете изменить размер изображения, потому что Xcode по-прежнему создает растрированные изображения во время сборки. Если вам нужно изменить размер изображения вы должны сделать новый .PDF-файл с другим размером.
Если у вас уже есть .svg изображение, которое имеет неправильный размер страницы, выполните следующие действия:
- изменить размер страницы (Inkscape > File > Document Properties)
- выберите все объекты (Ctrl+A) в рабочем пространстве и измените их размер, чтобы они соответствовали новому размеру страницы. (Удерживайте нажатой клавишу Ctrl, чтобы сохранить размер аспекта.)
для преобразования an .svg файл в a .pdf вы также можете найти онлайн утилиты, чтобы сделать работу за вас. вот один пример С ответ. Это имеет то преимущество, что позволяет установить .размер pdf легко.
более дальнеишее чтение
для тех, кто еще не обновился, были внесены изменения в Xcode 9 (iOS 11).
Что нового в Cocoa Touch (WWDC 2017 Session 201) (@32:55) https://developer.apple.com/videos/play/wwdc2017/201/
в нескольких словах, каталог активов теперь включает в себя новый флажок в Инспекторе атрибутов с именем "сохранить векторные данные". При проверке данные PDF будут включены в скомпилированный двоичный файл, увеличивая его размер, конечно. Но это дает возможность для iOS масштабировать векторные данные в обоих направлениях и обеспечивают хорошие изображения.(Со своими трудностями). Для iOS ниже 11 используются старые механизмы масштабирования, описанные в ответах вверх.
вы можете использовать обычные PDF файлы внутри вашего проекта в качестве векторных изображений и отображать изображения любого размера с помощью этого расширения. Этот способ лучше, потому что iOS не будет генерировать .PNG изображения из ваших PDF файлов, а также вы можете отображать изображения с любым размером вы хотите:
extension UIImage { static func fromPDF(filename: String, size: CGSize) -> UIImage? { guard let path = Bundle.main.path(forResource: filename, ofType: "pdf") else { return nil } let url = URL(fileURLWithPath: path) guard let document = CGPDFDocument(url as CFURL) else { return nil } guard let page = document.page(at: 1) else { return nil } let imageRect = CGRect(x: 0, y: 0, width: size.width, height: size.height) if #available(iOS 10.0, *) { let renderer = UIGraphicsImageRenderer(size: size) let img = renderer.image { ctx in UIColor.white.withAlphaComponent(0).set() ctx.fill(imageRect) ctx.cgContext.translateBy(x: 0, y: size.height) ctx.cgContext.scaleBy(x: 1.0, y: -1.0) ctx.cgContext.concatenate(page.getDrawingTransform(.artBox, rect: imageRect, rotate: 0, preserveAspectRatio: true)) ctx.cgContext.drawPDFPage(page); } return img } else { // Fallback on earlier versions UIGraphicsBeginImageContextWithOptions(size, false, 2.0) if let context = UIGraphicsGetCurrentContext() { context.interpolationQuality = .high context.setAllowsAntialiasing(true) context.setShouldAntialias(true) context.setFillColor(red: 1, green: 1, blue: 1, alpha: 0) context.fill(imageRect) context.saveGState() context.translateBy(x: 0.0, y: size.height) context.scaleBy(x: 1.0, y: -1.0) context.concatenate(page.getDrawingTransform(.cropBox, rect: imageRect, rotate: 0, preserveAspectRatio: true)) context.drawPDFPage(page) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } return nil } }}

Comments