Swift:如何使用该视图下方的所有视图保存视图的屏幕截图?

时间:2018-05-14 18:14:08

标签: ios swift uiview calayer screen-capture

我需要制作tableview的截图(它有明确的背景)。但在它下面,我有一个ImageView和模糊视图。我需要获取所有这些视图的屏幕截图。

我尝试了不同的解决方案,但他们没有捕获底层视图。有办法吗?

另外,我不需要屏幕的完整屏幕截图。只有受tableView限制的边界。我想,我有一些选项如何制作完整的屏幕截图,但它不适用于视图

我试过了:

1:

  func snapshot(of rect: CGRect? = nil) -> UIImage? {
    // snapshot entire view

    UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0)
    drawHierarchy(in: bounds, afterScreenUpdates: true)
    let wholeImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    // if no `rect` provided, return image of whole view

    guard let image = wholeImage, let rect = rect else { return wholeImage }

    // otherwise, grab specified `rect` of image

    let scale = image.scale
    let scaledRect = CGRect(x: rect.origin.x * scale, y: rect.origin.y * scale, width: rect.size.width * scale, height: rect.size.height * scale)
    guard let cgImage = image.cgImage?.cropping(to: scaledRect) else { return nil }
    return UIImage(cgImage: cgImage, scale: scale, orientation: .up)
}

2:

             UIGraphicsBeginImageContext(tableView.frame.size)
             tableView.layer.render(in: UIGraphicsGetCurrentContext()!)
             let image1 = UIGraphicsGetImageFromCurrentImageContext()!
             UIGraphicsEndImageContext()

我的等级是:

  • 基础UIView

    • 带图像的UIImageView

      • UIBlurEffect

        • UITableView,背景清晰,显示图表

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你需要一个真正的屏幕截图,而不是整个屏幕。因此,请采用原始屏幕截图:

let snap = UIApplication.shared.keyWindow!.snapshotView(afterScreenUpdates: true)
snap.frame = view.bounds // or something, if necessary

将屏幕应用于屏幕截图,其框架等于表格视图的边界:

let mask = CALayer()
mask.frame = tableView.frame.bounds
mask.backgroundColor = UIColor.white.cgColor
snap.layer.mask = mask