问题描述
面对您需要通过按下按钮将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 (将#修改为@)