【问题标题】:How to get entire snapshot of scrollview in iOS 13?如何在 iOS 13 中获取滚动视图的完整快照?
【发布时间】:2020-07-08 06:22:53
【问题描述】:

注意:iOS 13

以下代码:

extension UIScrollView {

    var snapshot: UIImage? {
        UIGraphicsBeginImageContextWithOptions(contentSize, false, 0)
        defer {
            UIGraphicsEndImageContext()
        }
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        let previousFrame = frame
        let previousOffset = contentOffset
        frame = CGRect(x: 0, y: 0, width: contentSize.width, height: contentSize.height)
        contentOffset = CGPoint.zero
        layer.render(in: context)
        frame = previousFrame
        contentOffset = previousOffset
        return UIGraphicsGetImageFromCurrentImageContext()
    }

}

它在 iOS 12 中确实可以完美运行,但是,在 iOS 13 中只截取了(可见区域)scrollView 的一部分。

我想截图总的scrollView。有什么办法解决吗?

【问题讨论】:

标签: swift uiscrollview ios13 snapshot


【解决方案1】:

解决问题的关键是先removeFromSuperview

private func snapshot() -> UIImage? {
    
    // remove first
    scrollView.removeFromSuperview()
    
    UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, false, 0)
    
    let savedContentOffset = scrollView.contentOffset
    let savedFrame = scrollView.frame
    
    scrollView.contentOffset = CGPoint.zero
    scrollView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height)
    
    scrollView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    
    scrollView.contentOffset = savedContentOffset
    scrollView.frame = savedFrame
    
    UIGraphicsEndImageContext()
    
    // add again
    self.view.addSubview(scrollView)
    
    scrollView.snp.remakeConstraints { (make) in
        make.left.right.equalToSuperview()
        make.top.equalTo(naviHeight)
        make.bottom.equalTo(-safeBottomHeight-105)
    }
    
    return image
}

有趣...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多