Webkit 与 SFSafariViewController 和核心数据

Webkit vs SFSafariViewController and Core Data

应用程序内网络浏览器的首选方法是什么?我的应用程序需要在底部有一个工具栏,我需要能够通过点击工具栏上的按钮来截取访问过的网页。

这就是我 运行 喜欢的内容。我希望能够在我的应用程序中单击 link,打开应用程序内浏览器,截取屏幕截图,然后保存到核心数据以及有关该网站的其他信息。

我可以使用 Webkit 的 .takesnapshot() 方法将屏幕截图保存到相机胶卷。我一直无法将其保存到核心数据中。截至昨晚,我在 SO 上发现了一些功能,它们展示了如何截取 UIView 和 return UIImage 的屏幕截图,但我无法将其转换回数据,因为这是核心数据需要二进制数据。有没有人有好的资源将 Webkit 快照保存到 Core Data?

在我昨晚尝试的其中一个函数中,我能够 return UIImage 对象,但我无法将其转换回 Data。我可以将有关站点的所有其他数据保存到 Core Data,但我无法保存图像 - 事实上,当我尝试使用 Webkit 的 .takesnapshot() 方法直接保存数据时,结果为零。

我将分两部分回答你的问题。

WebKit 与 SFSafariViewController

如果你想要一个带有截图按钮的自定义工具栏,我会使用带有自定义标签栏的 UIViewController,你可以在其中添加任何你想要的按钮,然后我还会嵌入一个 WebKit 也在视图控制器中查看。这应该很简单。

正在将屏幕截图保存到 Core Data

听起来,您可能以错误的方式截取屏幕截图,您希望使用图形开始和结束图像上下文来执行此操作,如下所示:

let layer = UIApplication.shared.keyWindow!.layer
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale)
layer.render(in: UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()

现在您的 screenshot 变量中已保存为 UIImage? 的屏幕截图。接下来,您应该将其转换为数据:

let data = UIImagePNGRepresentation(screenshot!)

这应该为您提供图像的数据表示,然后您可以将其保存到 Core Data。