微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文本转换为png图像SwiftUI

如何解决将文本转换为png图像SwiftUI

面对您需要通过按下按钮将Texteditor中写入的所有内容转换为图像的事实。例如,即使文本包含多行并且在滚动时屏幕上也消失了。告诉我如何在swiftUI上实现它?

我当前正在使用此代码

public struct ScreenshotableView<Content: View>: View {
    @Binding var shotting: Bool
    @Binding var tocopy: Bool
    var completed: (UIImage) -> Void
    var toCopycompleted: (UIImage) -> Void
    let content: Content
    
public init(shotting:Binding<Bool>,tocopy:Binding<Bool>,completed: @escaping (UIImage) -> Void,toCopycompleted: @escaping (UIImage) -> Void,@viewbuilder content: () -> Content) {
    self._shotting = shotting
    self._tocopy = tocopy
    self.completed = completed
    self.toCopycompleted = toCopycompleted
    self.content = content()
}
    
public var body: some View {
    
    func internalView(proxy: GeometryProxy) -> some View {
        if self.shotting {
            let frame = proxy.frame(in: .local)
            dispatchQueue.main.async {
                let screenshot = self.content.takeScreenshot(frame: frame,afterScreenUpdates: true)
                self.completed(screenshot)
            }
        }
        return Color.clear
    }
    
    return content.background(GeometryReader(content: internalView(proxy:)))
}

public extension View {
func takeScreenshot(frame:CGRect,afterScreenUpdates: Bool) -> UIImage {
    let hosting = UIHostingController(rootView: self)
    hosting.overrideUserInterfaceStyle = UIApplication.shared.windows.first?.overrideUserInterfaceStyle ?? UIUserInterfaceStyle.unspecified
    hosting.view.frame = frame
    return hosting.view.takeScreenshot(afterScreenUpdates: afterScreenUpdates)
}


public extension UIView {
func takeScreenshot() -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size,self.isOpaque,0)
    self.layer.render(in: UIGraphicsGetCurrentContext()!)
    let snapshot = UIGraphicsGetimageFromCurrentimageContext()
    UIGraphicsEndImageContext()
    return snapshot!
}

func takeScreenshot(afterScreenUpdates: Bool) -> UIImage {
    if !self.responds(to: #selector(drawHierarchy(in:afterScreenUpdates:))) {
        return self.takeScreenshot()
    }
    UIGraphicsBeginImageContextWithOptions(self.bounds.size,0)
    let draw = self.drawHierarchy(in: self.bounds,afterScreenUpdates: afterScreenUpdates)
    print(draw)
    let snapshot = UIGraphicsGetimageFromCurrentimageContext()
    UIGraphicsEndImageContext()
    return snapshot!
}

}

但是这里的屏幕快照仅是从可见部分获得的,不包括滚动

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。