我正在尝试使用在Xcode 11中使用SwiftUI的应用程序中通过“单比例”使用基于矢量的PDF图像,但是当我按比例放大图像时,图像总是看起来很模糊。
我在Xcode 11的UIKit中对此没有任何问题。我创建了一个虚拟应用程序,其中包含2个场景,两个场景都显示相同的矢量图像。我在情节提要中创建了第一个场景,然后使用HostingViewController嵌入了在SwiftUI中制作的相同场景。当我运行应用程序时,第一个场景(UIKit)显示了清晰,不模糊的图像。第二个(SwiftUI)场景很模糊,尽管使用了相同的源图像资源,但似乎并没有使用矢量数据。
通过使用矢量图像创建UIImage,然后使用此UIImage扩展来调整UIImage的大小,然后将其传递到Image
中,我能够“解决”此问题。但是,我在resized(to:)
方法中输入的大小在运行时没有区别,因此我还必须在[var body]中将.frame(w:,h:)
添加到image
以使其显示正确的大小。
let uiImage = UIImage(named: "Logo-vector")!
var image: Image {
Image(uiImage: uiImage.resized(to: CGSize(width: 500, height: 500)))
.resizable()
}
var body: some View {
NavigationView {
VStack(alignment: .center, spacing: 8) {
Spacer()
Text("Logo vector SwiftUI")
image
.frame(width: 240, height: 216)
...
}
...
}
}
}
extension UIImage {
func resized(to size: CGSize) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { _ in
draw(in: CGRect(origin: .zero, size: size))
}
}
}
通过这种解决方法,图像是清晰的,并且在运行时可以适当地调整大小,但感觉有点像黑客一样。
我已经在网上到处寻找不同的解决方案,或者其他任何人专门使用SwiftUI遇到此问题,但根本找不到任何东西。
还有其他人遇到过这个问题吗,还是有人有更好的解决方案?
尝试在每个pdf图像资产上启用“ IPreserve矢量数据”(在“ Assets.xcassets”文件夹中选择图像,然后在“属性检查器>图像集>调整大小”中选择图像)