一组用于在 iOS 应用中解析和渲染与分辨率无关的 SVG(可缩放矢量图形)文件的类。
技术细节:JAMSVGImage 解析 SVG 文件,并将所有 'path' 元素转换成一组风格化的 UIBezierPath 对象,这些对象在运行时以设备的原生分辨率进行渲染。SVG 文件通常由 Adobe Illustrator 或 Inkscape 等二维绘图应用程序生成。
外观:无论放大还是缩小,它们看起来都很棒,因为 SVG 图像使用数学曲线而不是PNG或JPG中的离散像素进行描述。
方便性:无需生成 @2x 和 @3x 版本的图形资产。单个 SVG 即可满足所有需求。
文件大小:SVG 和 SVGZ(压缩的 SVG)的文件大小通常远小于PNG或JPG等图形资产的集合。
在您通常使用 UIImage、UIImageView 或您会程序化绘制图形的地方使用 JAMSVGImage 和 JAMSVGImageView。这些类有几种使用方法。
JAMSVGImageView 是 IBDesignable 和 IBInspectable 的,因此您可以在 Interface Builder 中将 UIView 拖动到布局中,将类类型设置为 "JAMSVGImageView",然后输入 SVG 图像的名称,如下所示
其次,您可以使用 JAMSVGImage 来实例化一个新的 JAMSVGImageView,并将其添加到视图层次结构中
JAMSVGImage *tiger = [JAMSVGImage imageNamed:@"tiger"];
JAMSVGImageView *tigerImageView = [JAMSVGImageView.alloc initWithSVGImage:tiger];
tigerImageView.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:tigerImageView];
无论设备的密度或缩放比例如何,SVG 图像都会以高分辨率进行绘制。
第三,您可以在当前图形上下文中创建一个 JAMSVGImage 实例,并像这样使用 drawInCurrentContext 方法
JAMSVGImage *tiger = [JAMSVGImage imageNamed:@"tiger"];
[tiger drawInCurrentContext];
您还可以调用 [tiger image] 或 .CGImage 以获取栅格化的 UIImage 或 CGImageRef,并在任何使用 UIImage 或 CGImageRef 的地方使用它。如果需要更大的或更小的图片,您可以在获取图像之前设置缩放,或者您可以通过传入一个矩形将 SVG 在该矩形内以适当的缩放比例渲染,以适应您的设备的屏幕(无论是 @1x、@2x 还是 @3x 屏幕)
[self.button setBackgroundImage:[[JAMSVGImage imageNamed:@"fancyButton"] imageAtSize:self.button.bounds.size] forState:UIControlStateNormal];
最后,还有一个继承自 UIButton 的 JAMSVGButton 子类,允许通过 Interface Builder 设置四种按钮状态到 SVG 文件。
文件格式
形状原语
形状外观
SVG文档属性
为什么不使用带有Xcode 6+和iOS 7+的矢量PDF?Xcode的矢量PDF功能仅限于构建时将@1x、@2x和@3x位图以自然大小渲染。JAMSVGImage功能更加强大,因为SVG在运行时可以以任意大小渲染。
如果您在产品应用中使用此功能,请告诉我!我非常希望得到反馈并找出如何改进它。如果您缺少任何SVG部分,您应该进行分支、修复并通过拉取请求进行提交。唯一支持的SVG元素是“path”元素和相关样式信息。JAMSVGImage通过了所有19项SVG1.1对该“path”元素的兼容性测试。