UIGraphics,制作屏幕截图但避免使用UI元素

时间:2017-03-21 05:34:19

标签: ios iphone swift swift3 uiimageview

构建功能,类似于Snapchat的贴纸。 制作照片,添加贴纸(表情符号),发布图像。 我当前的视图层次结构是:

  • 主要观点
    • 查看用户的照片
    • 查看ui元素('取消/添加贴纸/帖子')+贴纸/表情符号也添加到此视图中。

用户用户照片的UIImageView,就像在Snapchat中一样占据整个屏幕。 UI元素添加在不同的视图中,但在用户的UIImageView之上。

我查看截图的代码:

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
    view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    if let imageToData = UIImageJPEGRepresentation(img!, 0.2) {
        //saving imageToData to Firebase.    
    }

但是这会获取主视图中的所有内容,包括UI元素。

一个选项是限制用户的UIImageView照片,以便UI元素不会覆盖它。然后我们可以制作有限视图的屏幕截图。 但这不是应用程序的用户体验应该是什么。

我想到的另一个选择是使用UIElements将用户的UIImageView照片放在视图顶部。然后添加所有表情符号。但这将涵盖所有UI元素。

如何制作用户UIImageView照片+表情符号的截图 - UIElements?

1 个答案:

答案 0 :(得分:0)

根据您对我的评论的回答,您只需要按如下方式设置图像层次结构:

  • 主要观点(A)
    • 子视图(B)设置为图像和表情符号的边对边拉伸
      • 查看(D)用户的照片
      • 贴纸/表情符号或任何其他设计元素
    • 查看(C)ui元素('取消/添加贴纸/帖子')

我注意到你说你需要边缘到边缘的图像视图,我不明白为什么这对于上述层次结构来说是一个问题,除非我因为你可以做错而遗漏了什么子视图B在主视图上左右拉伸,然后将图像视图(D)设置为边对边拉伸。

根据您的上述代码修改了一些代码。在以下代码中,viewB是对B视图的引用。

UIGraphicsBeginImageContextWithOptions(viewB.bounds.size, viewB.isOpaque, 0.0)
viewB.drawHierarchy(in: viewB.bounds, afterScreenUpdates: true)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

if let imageToData = UIImageJPEGRepresentation(img!, 0.2) {
    //saving imageToData to Firebase.    
}