【问题标题】:Webkit vs SFSafariViewController and Core DataWebkit vs SFSafariViewController 和核心数据
【发布时间】:2019-09-19 02:44:45
【问题描述】:

对于应用内网络浏览器,哪种方法最受青睐?我的应用需要在底部有一个工具栏,并且我需要能够通过点击工具栏上的按钮来截取访问过的网页。

这就是我遇到的问题。我希望能够在我的应用中点击一个链接,打开一个应用内浏览器,截取屏幕截图,并将网站的其他信息连同其他信息一起保存到核心数据中。

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

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

【问题讨论】:

    标签: swift core-data webkit sfsafariviewcontroller


    【解决方案1】:

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

    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。

    【讨论】:

    • 由于某种原因我没有 UIImagePNGRepresentation。您提供的内容非常接近我在函数中已有的内容,并且它返回一个 UIImage。这就是我无法转换的。根据此链接,看起来(除非我遗漏了一些可能的东西)该方法不再存在:link 我昨天尝试过,但我也没有在返回值上获得 .jpegData 方法。跨度>
    • 对不起,UIImagePNGRepresentation 是旧的,应该是UIImage.pngData(screenshot!)
    猜你喜欢
    • 2012-03-23
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2011-01-11
    • 2010-12-04
    • 2014-09-18
    相关资源
    最近更新 更多