繁体   English   中英

如何在 SwiftUI 中保存与我的图像数据相结合的视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM