Getting a screenshot of a UIScrollView, including offscreen parts

前端 未结 12 2213
遥遥无期
遥遥无期 2020-11-22 17:31

I have a UIScrollView decendent that implements a takeScreenshot method that looks like this:

-(void)takeScreenshot {  
  CGRect contextRect  =          


        
12条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-22 18:00

    A refined Swift 4.x/5.0 version, based on @RyanG 's answer:

    fileprivate extension UIScrollView {
        func screenshot() -> UIImage? {
            // begin image context
            UIGraphicsBeginImageContextWithOptions(contentSize, false, 0.0)
            // save the orginal offset & frame 
            let savedContentOffset = contentOffset
            let savedFrame = frame
            // end ctx, restore offset & frame before returning
            defer {
                UIGraphicsEndImageContext()
                contentOffset = savedContentOffset
                frame = savedFrame
            }
            // change the offset & frame so as to include all content
            contentOffset = .zero
            frame = CGRect(x: 0, y: 0, width: contentSize.width, height: contentSize.height)
            guard let ctx = UIGraphicsGetCurrentContext() else {
                return nil
            }
            layer.render(in: ctx)
            let image = UIGraphicsGetImageFromCurrentImageContext()
    
            return image
        }
    }
    

提交回复
热议问题