我在一个视图中有几个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.
答案 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