拍摄UIScrollView可见区域的屏幕截图

时间:2019-03-05 10:10:04

标签: swift uiscrollview screenshot

我有一个UIScrollView作为视图控制器主视图的子视图。我正在尝试保存仅在UIScrollView框架中可见的屏幕截图。

UIGraphicsBeginImageContextWithOptions(imageScrollView.bounds.size,false,UIScreen.main.scale)         让上下文= UIGraphicsGetCurrentContext()         context?.translateBy(x:0,y:0)

    view.layer.render(in: context!)
    let visibleScrollViewImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()


    let popupImageView = UIImageView(image: visibleScrollViewImage)
    popupImageView.layer.borderColor = UIColor.white.cgColor
    popupImageView.layer.borderWidth = 4
    popupImageView.frame = CGRect(origin: CGPoint(x: 0, y: 400), size: CGSize(width: 400, height: 400))

    imageScrollView.removeFromSuperview()

    view.addSubview(popupImageView)

带有popupImageView的部分只是为了测试并查看实际保存的内容,似乎存在一些偏移问题,水平轴很好,但是我似乎只获得了我想要的图像的前三分之一,并且上面只是黑暗的空间。

似乎必须是一个非常简单的解决方案,但是我已经搜索了所有类似的问题,但是找不到答案。

感谢堆!

2 个答案:

答案 0 :(得分:1)

尝试以下方法。如果我使用UITableView控件执行此操作,那么它将起作用。

import UIKit

class ViewController: UIViewController {
    @IBAction func snapTapped(_ sender: UIButton) {
        UIGraphicsBeginImageContextWithOptions(imageScrollView.bounds.size, true, 1.0)
        imageScrollView.drawHierarchy(in: CGRect(origin: CGPoint.zero, size: imageScrollView.bounds.size), afterScreenUpdates: true)
        if let image = UIGraphicsGetImageFromCurrentImageContext() {
            UIGraphicsEndImageContext()
            myImageView.image = image
        }
    }
}

答案 1 :(得分:0)

func screenShotMethod()->UIImage
{
  let layer = self.imageScrollView.layer
  let scale = UIScreen.main.scale
  UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);

  layer.render(in: UIGraphicsGetCurrentContext()!)
  let screenshot = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()

  return screenshot!
}