我正在尝试使用PDF矢量图像作为CALayer
的内容,但是当将其缩放到其初始大小15x13以上时,它看起来非常模糊。我在资产目录中为有问题的图像打开了“保留矢量数据”。这是我的视图的代码,如果isComplete
属性设置为{{1},则该代码在一层上绘制一个外圆,并使用第二层在视图的中心显示一个选中标记的图像。 }。
true
如果我将视图的大小设置为240x240,则此代码将导致以下显示:
答案 0 :(得分:0)
我能够为此创建解决方法。我可以在layoutSubviews
中检查图像的预期大小,如果它与UIImage
的大小不匹配,则可以使用UIGraphicsImageRenderer
创建一个新图像,该图像可以缩放到正确的大小。我创建了UIImage
扩展名来简化此操作:
extension UIImage {
internal func imageScaled(toSize scaledSize: CGSize) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: scaledSize)
let newImage = renderer.image { [unowned self] _ in
self.draw(in: CGRect(origin: .zero, size: scaledSize))
}
return newImage
}
}
现在,我更新后的layoutSubviews
方法如下:
public override func layoutSubviews() {
super.layoutSubviews()
// Layout circle
let path = UIBezierPath(ovalIn: bounds.insetBy(dx: lineWidth.mid, dy: lineWidth.mid))
circleLayer.path = path.cgPath
// Layout check
if let checkImage = checkImage, checkImage.size != checkImageSize {
checkLayer.contents = checkImage.imageScaled(toSize: checkImageSize).cgImage
}
let checkOrigin = CGPoint(x: bounds.midX - checkImageSize.midW, y: bounds.midY - checkImageSize.midH)
checkLayer.frame = CGRect(origin: checkOrigin, size: checkImageSize)
}
这会产生清晰的图像: