SDWebImageSVGKitPlugin
用途
SDWebImageSVGKitPlugin 是一个 SVG 编码插件,为 SDWebImage 框架提供支持,使用 SVGKit SVG 引擎实现 SVG 图像的支持。
注意:iOS 13+/macOS 10.15+ 支持原生 SVG 渲染(称为 Symbol Image),使用系统框架加载 SVG。有关更多信息,请参阅 SDWebImageSVGCoder。
示例
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。
您可以修改代码或使用其他 SVG 文件以检查兼容性。
要求
- iOS 9+
- tvOS 9+
- macOS 10.11+
- Xcode 11+
安装
CocoaPods
SDWebImageSVGKitPlugin可以通过CocoaPods获取。要安装它,只需在Podfile中添加以下行
pod 'SDWebImageSVGKitPlugin'
Swift Package Manager (Xcode 11及以上)
SDWebImagePhotosPlugin可以通过Swift Package Manager获取。
let package = Package(
dependencies: [
.package(url: "https://github.com/SDWebImage/SDWebImageSVGKitPlugin.git", from: "1.4")
]
)
Carthage
SDWebImageSVGKitPlugin可以通过Carthage获取。
github "SDWebImage/SDWebImageSVGKitPlugin"
用法
使用UIImageView(将SVG渲染为位图图像)
要使用SVG编码器,您首先应该将SDImageSVGKCoder
添加到编码器管理器。然后您可以通过调用视图分类方法来开始加载SVG图像。
因为SVG是一种矢量图像格式,这意味着它没有固定的位图大小。然而,UIImage
或CGImage
都是位图图像。对于UIImageView
,我们只会解析具有固定图像大小(从SVG视图窗口信息中获取)的SVG。但我们也支持您使用SDWebImageContextThumbnailPixelSize
上下文选项在图像加载期间指定所需的大小。并且您可以使用SDWebImageContextImagePreserveAspectRatio
上下文选项指定是否在缩放时保持纵横比。
- Objective-C
SDImageSVGKCoder *svgCoder = [SDImageSVGKCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:svgCoder];
UIImageView *imageView;
// this arg is optional, if don't provide, use the viewport size instead
CGSize svgImageSize = CGSizeMake(100, 100);
[imageView sd_setImageWithURL:url placeholderImage:nil options:0 context:@{SDWebImageContextThumbnailPixelSize : @(svgImageSize)];
- Swift
let svgCoder = SDImageSVGKCoder.shared
SDImageCodersManager.shared.addCoder(svgCoder)
let imageView: UIImageView
imageView.sd_setImage(with: url)
// this arg is optional, if don't provide, use the viewport size instead
let svgImageSize = CGSize(width: 100, height: 100)
imageView.sd_setImage(with: url, placeholderImage: nil, options: [], context: [.imageThumbnailPixelSize : svgImageSize])
使用SVGKImageView(将SVG作为矢量图像渲染)
SVGKit还为矢量图像加载提供一些内置图像视图类(无损失细节地缩放任何大小)。SVGKLayeredImageView
和SVGKFastImageView
是SVGKImageView
基类的子类。我们同样支持这些图像视图类。您可以使用与正常UIImageView
相同的API。
关于SVGKLayeredImageView
、SVGKFastImageView
或SVGKImageView
的文档,请访问SVGKit仓库以获取更多信息。
注意:如果您只使用这些图像视图类,而不在UIImageView
中使用SVG,您不需要将SVG编码器注册到编码器管理器中。这些图像视图加载使用了SDWebImage的自定义图像类功能。
注意:这些内置图像视图类在UIView.contentMode
属性上不太好用,您需要图像加载后重新缩放层树。我们提供了一个简单的现成解决方案来支持它。将sd_adjustContentMode
属性设置为YES
即可。
- Objective-C
SVGKImageView *imageView; // can be either `SVGKLayeredImageView` or `SVGKFastImageView`
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.sd_adjustContentMode = YES; // make `contentMode` works
[imageView sd_setImageWithURL:url];
- Swift
let imageView: SVGKImageView // can be either `SVGKLayeredImageView` or `SVGKFastImageView`
imageView.contentMode = .aspectFill
imageView.sd_adjustContentMode = true // make `contentMode` works
imageView.sd_setImage(with: url)
导出SVG数据
SDWebImageSVGKitPlugin
提供了一种简单的方法,可以将框架生成的SVG图像导出为原始SVG数据。
- Objective-C
UIImage *image; // Image generated from SDWebImage framework, actually a `SDSVGKImage` instance.
NSData *imageData = [image sd_imageDataAsFormat:SDImageFormatSVG];
- Swift
let image: UIImage // Image generated from SDWebImage framework, actually a `SDSVGKImage` instance.
let imageData = image.sd_imageData(as: .SVG)
截图
这些SVG图像来自维基百科,您也可以使用自己的SVG图像尝试演示。
作者
DreamPiggy
许可证
SDWebImageSVGKitPlugin遵循MIT许可证。详细信息请参阅LICENSE文件。