【发布时间】:2021-07-27 10:50:22
【问题描述】:
我有一个变量“meme”,其中包含一个图像和两个文本字段:
var meme: some View {
image!
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: UIScreen.main.bounds.size.width)
.overlay(
TextField("TOP", text: $topText)
.foregroundColor(.white)
.font(Font.custom("HelveticaNeue-CondensedBlack", size: 30))
.frame(width: UIScreen.main.bounds.size.width * 0.75)
.multilineTextAlignment(.center)
.padding(.vertical, 50.0)
.onTapGesture {
topText = ""
},
alignment: .top
)
.overlay(
TextField("BOTTOM", text: $bottomText)
.foregroundColor(.white)
.font(Font.custom("HelveticaNeue-CondensedBlack", size: 30))
.frame(width: UIScreen.main.bounds.size.width * 0.75)
.multilineTextAlignment(.center)
.padding(.vertical, 50.0)
.onTapGesture {
bottomText = ""
},
alignment: .bottom
)
}
我想用我的所有图像和 textFields 给出的两个文本创建一个图像。为此,我使用了 UIGraphics 中的 draw 方法。而且,我只是swiftui的初学者。我在互联网上找到了一个代码,该人实现了一个从 uiview 创建图像的功能:
func createImage(from view: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(CGSize(width: view.frame.width, height: view.frame.height), true, 1)
view.layer.render(in: UIGraphicsGetCurrentContext()!)
let generatedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return generatedImage!
}
但就我而言,我有一个具有某种视图类型的变量。我试图创建一个新结构作为视图。但它仍然是一个视图,我怎样才能创建一个 UIView ?
编辑:我尝试了 Raja Kishan 通过写作提出的建议:
items.append(createImage(from: UIHostingController(rootView: meme).view))
在按钮的动作部分。
但是下面一行会抛出一个错误,说“致命错误:在展开可选值时意外发现 nil”:
view.layer.render(in: UIGraphicsGetCurrentContext()!)
在 createImage 函数中。
为什么是零?
【问题讨论】:
-
你可以通过这个
UIHostingController(rootView: yourSwiftUIView).view查看 -
我有一个问题:它返回一个 nil 值。
-
你必须为 meme 制作另一个结构视图 var ane 必须通过 struct view 而不是 var view。
-
在同一行抛出同样的错误!