[英]How I can save a view combined with my Image Data in SwiftUI
我正在开发一个贴纸制作应用程序。 所以使用 ZStack 在照片上添加文字。 我想用我添加的这些文本元素将我的照片保存到画廊。但我的代码只保存图像而不是文本元素。 所以帮助我摆脱这个。
我的代码如下:
class ImageSaver : NSObject {
var successHandler: (() -> Void)?
var errorHandler: ((Error) -> Void)?
@ObservedObject var model : TextBoxModel = TextBoxModel()
@Published var rect : CGRect = .zero
func writeToPhotoAlbum(imageData : Data){
let SwiftUIView = ZStack{
ForEach(model.textBoxes){box in
ZStack {
Text(box.text)
.font(.custom(box.textFont,size : CGFloat(box.textSize)))
.foregroundColor(box.textColor)
.padding(box.bgPadding)
.background(
ZStack {
RoundedRectangle(cornerRadius: box.bgRadius)
.fill(box.bgColor.opacity(box.bgSize))
RoundedRectangle(cornerRadius: 5)
.stroke(Color.black,style : StrokeStyle(
lineWidth : 1, lineCap : .round , dash : [5]
))
}
)
.opacity(box.textOpacity)
.shadow(color: box.shadowColor, radius: box.shadowSize)
.rotationEffect(box.rotationAngle)
}
.offset(box.offset)
}
}
.frame(width: UIScreen.main
.bounds.width, height: UIScreen.main
.bounds.width)
let controller = UIHostingController(rootView: SwiftUIView).view!
controller.frame = rect
controller.backgroundColor = .clear
controller.drawHierarchy(in: CGRect(origin: .zero, size: rect.size), afterScreenUpdates: true)
if let image = UIImage(data: imageData),let cgImage = image.cgImage?.cropping(to: image.cropRect()){
guard let pngData = UIImage(cgImage: cgImage).pngData() else { return }
guard let finalImage = UIImage(data: pngData) else { return }
UIImageWriteToSavedPhotosAlbum(finalImage, self, #selector(saveError), nil)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.