Webkit vs SFSafariViewController and Core Data



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

这是我遇到的。我希望能够单击应用程序中的链接、打开应用内浏览器、截取屏幕截图,并将有关网站的其他信息一起保存到核心数据。

我能够使用 Webkit 的 .takesnapshot() 方法将屏幕截图保存到相机胶卷中。我一直无法将其保存到核心数据中。截至昨晚,我在 SO 上发现了一些函数,这些函数显示了如何截取 UIView 的屏幕截图并返回 UIImage,但我无法将其转换回数据,因为这是核心数据对二进制数据的期望。有没有人有很好的资源将 Webkit 快照保存到核心数据?

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

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

WebKit vs SFSafariViewController

如果您想拥有一个带有用于截屏的按钮的自定义工具栏,我会使用带有自定义选项卡栏的UIViewController,您可以在其中添加所需的任何按钮,然后我也会在视图控制器中嵌入WebKit视图。这应该很简单。

将屏幕截图保存到核心数据

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

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!)

这应该为您提供图像的数据表示形式,然后您可以将其保存到核心数据中。

最新更新