UIImage extension for iOS which converts a black PDF image into a UIImage of any size, in any color. One line of code, really simple to use.
Read all about it: http://andrewhart.me/post/54194410717/adding-vector-support-to-uiimage
Adjustment
If you want to adjust the size or color of an icon, you don't have to re-export it, you just change it in the code.
If you want to change the shape of the icon, you don't have to re-export a number of different versions - you export it once and it'll update across all sizes and colors.
Simplicity
It simplifies your project and file system by removing the need for multiple versions of the same icon.
File size
File size is reduced because you only have the 1 export, which covers every version of the icon.
Lets say you need an icon in 3 different versions:
- A blue 100x100 icon.
- A red 100x100 icon.
- A red 250x250 icon.
Doing this the old way means exporting this into 3 separate PNG files, plus a @2x version. You now have 6 exported files:
icon_clock_blue_100.png
icon_clock_blue_100@2x.png
icon_clock_red_100.png
icon_clock_red_100@2x.png
icon_clock_red_160.png
icon_clock_red_160@2x.png
Cumulatively (and I've exported these and included them in the project), they're 70kb. Not a huge deal, but this is just a single icon. Once you have a full project, this really adds up.
Doing this the new way, you export a single PDF file, using black as the icon color. You have 1 exported file:
icon_clock.pdf
This works with retina, it works across all of those colors, and it works at different sizes. And it weighs in at 12kb. That's an 83% reduction in size.
And it's super simple to use.
-
Create a black icon and export it as a PDF of any size. I hear that Adobe Illustrator has bad PDF export support, and will produce large files. I'd personally recommend using Sketch app, which makes use of the OSX Quartz renderer.
-
Import your icon to your project.
-
Add
QuartzCore.framework
to your project. Import"UIImage+PDFColoredImage.h"
into the file where you want to use it. In my personal usage, I put this in the-Prefix.pch
file, as it's in use across my entire project. -
Then, when you want to display an image:
NSString *iconPDFName = @"icon_clock.pdf"; CGSize size = CGSizeMake(160, 160); UIColor *fillColor = [UIColor redColor]; UIImage *image = [UIImage imageWithPDFNamed:iconPDFName fitSize:size withFillColor:fillColor];
Created by @AndrewProjDent, for an upcoming app.
The PDF > UIImage conversion is done by use of the fantastic UIImage-PDF.
UIImage-PDFColoredImage is available under the MIT license.