捕捉屏幕没有空格?

时间:2017-10-26 12:43:43

标签: swift

我在一个视图中有几个png,我捕获到一个图像:

let rect: CGRect = self.frame
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
        let context: CGContext = UIGraphicsGetCurrentContext()!
        self.layer.render(in: context)
        let img: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

问题是,我希望得到最终的png大小作为视图中内容的大小,不是常量的矩形 rect.size

因此,如果较低的内容从50px开始,最大内容以200px结束,那么我的新png的高度将为150.

2 个答案:

答案 0 :(得分:1)

您应该遍历视图以检测内容的边界。

您可以手动计算框架

var minX = view.frame.origin.x + view.frame.size.width
var minY = view.frame.origin.y + view.frame.size.height
var maxX = 0
var maxY = 0

for subview in self.subviews {
    minX = min(minX, subview.frame.origin.x)
    minY = min(minY, subview.frame.origin.y)
    maxX = max(maxX, subview.frame.origin.x + subview.frame.size.width)
    maxY = max(maxY, subview.frame.origin.y + subview.frame.size.height)
}

var newPngRect = CGRect(x: minX, y: minY, width: maxX-minX, height: maxY-minY)

UIGraphicsBeginImageContextWithOptions(newPngRect!, false, 0.0)

确定子视图的union

var newPngRect = CGRect.zero
for subview in subviews {
    baseRect = baseRect.union(subview.frame)
}

UIGraphicsBeginImageContextWithOptions(newPngRect, false, 0.0)

如果需要self.subviews,请考虑yourContentView.subviews

答案 1 :(得分:0)

创建一个包含您要截取的所有子视图的视图(switch)。

使用自动布局来布置所有子视图,无论您想要什么。

当您准备截图视图时,请使用:

containerView