import { UIView } from "UIKit"; import { SVGKFastImageView, SVGKImage } from "SVGKit"; /** * CoolSvg iOS 平台 SVG 渲染器 * - 本地文件路径 */ export class CoolSvg { /** uni-app x 原生视图元素 */ $element: UniNativeViewElement; /** iOS SVGKFastImageView 实例 */ imageView: SVGKFastImageView | null = null; /** * 构造函数 * @param element uni-app x 原生视图元素 */ constructor(element: UniNativeViewElement) { this.$element = element; // 创建占位符 SVG 图像 let placeholderImage = SVGKImage((contentsOf = URL((fileURLWithPath = "")))); // 初始化 SVG 图像视图 this.imageView = new SVGKFastImageView((svgkImage = placeholderImage)); // 将视图绑定到 uni-app x 元素 this.$element.bindIOSView(this.imageView!); } /** * 加载并渲染 SVG * @param src SVG 数据源 * @param color 填充颜色,用于替换 SVG 中 path 元素的 fill 属性 */ load(src: string, color: string) { // 空字符串检查 if (src == "") { return; } try { // 从资源路径加载 SVG 图像 let svgImage = SVGKImage( (contentsOf = URL((fileURLWithPath = UTSiOS.getResourcePath(src)))) ); // 加载失败检查 if (svgImage == null) { return; } // 设置 SVG 图像到视图 this.imageView!.image = svgImage; // 应用颜色覆盖 if (color != "") { // 创建颜色覆盖层视图 let colorView = new UIView(); colorView.frame = this.imageView!.bounds; colorView.backgroundColor = UTSiOS.colorWithString(color); // 设置合成滤镜为 sourceAtop,实现颜色覆盖效果 colorView.layer.compositingFilter = "sourceAtop"; this.imageView!.addSubview(colorView); } } catch (e) { // 静默处理异常,避免影响应用运行 } } }