首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode11PDF图像资产“保留矢量数据”不能在SwiftUI中工作?

Xcode11PDF图像资产“保留矢量数据”不能在SwiftUI中工作?
EN

Stack Overflow用户
提问于 2019-09-17 16:00:07
回答 3查看 3.7K关注 0票数 18

我正尝试在Xcode11中使用SwiftUI的一个应用程序中使用“单尺度”来使用基于矢量的PDF图像,但当我放大它的尺寸时,图像总是看起来很模糊。

我在Xcode11的UIKit中没有遇到这个问题,我创建了一个有2个场景的虚拟应用程序,它们都显示相同的矢量图像。我在故事板中创建了第一个场景,然后使用HostingViewController嵌入了在SwiftUI中制作的相同场景。当我运行这个应用程序时,第一个场景(UIKit)显示了一个清晰的、非模糊的图像。然而,第二个(SwiftUI)场景是模糊的,似乎没有使用矢量数据,尽管使用了相同的源图像资源。

我可以通过使用矢量图像创建一个UIImage来“解决”这个问题,然后在将UIImage传递到Image之前使用这个UIImage扩展来调整它的大小。但是,我在resized(to:)方法中输入的大小在运行时没有区别,所以我还必须将.frame(w:,h:)添加到'var body‘中的image中,以使其显示正确的大小。

代码语言:javascript
复制
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,但根本没有找到任何东西。

其他人有这个问题吗?或者有没有人有更好的解决方案?

EN

回答 3

Stack Overflow用户

发布于 2019-12-13 23:40:59

尝试在每个IPreserve图像资源上启用“pdf矢量数据”(选择"Assets.xcassets“文件夹中的图像,然后在”属性检查器>图像集>调整大小“中)

票数 1
EN

Stack Overflow用户

发布于 2020-01-13 12:38:43

这对我很有效。不需要在开始时声明image变量

代码语言:javascript
复制
NavigationView {
      VStack(alignment: .center, spacing: 8) {
      Spacer()
      Text("Logo vector SwiftUI")

      Image(systemName: "text.bubble") // or Image("ImageName") for local assets
          .resizable().aspectRatio(contentMode: .fit)
          .frame(width:100, height:100)


            }
            ...
        }
票数 0
EN

Stack Overflow用户

发布于 2022-02-27 16:57:40

我组装了一个名为ResizableVector的跨平台框架,它执行相同的调整大小方法。

代码语言:javascript
复制
extension PlatformImage {
    func resized(to size: CGSize) -> PlatformImage {
        return GraphicsImageRenderer(size: size).image { _ in
            self.draw(in: CGRect(origin: .zero, size: size))
        }
    }
}

其中PlatformImage是UIImage或NSImage的类型别名,GraphicsImageRenderer是UIGraphicsImageRenderer或MacGraphicsImageRenderer的类型别名。

该框架提供了一个名为ResizableVector的图像视图来代替SwiftUI。如果需要,它还可以尊重原始的纵横比。

您可以使用SPM添加它-在GitHub上查看它:https://github.com/Matt54/ResizableVector

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57969823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档