我想用其子视图捕获视图。我正在使用此代码捕获屏幕:
let view = self.faceTrackerContainerView
UIGraphicsBeginImageContext(CGSizeMake(view.bounds.size.width, view.bounds.size.height))
UIGraphicsGetCurrentContext()!
self.view?.drawViewHierarchyInRect(view.frame, afterScreenUpdates: true)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
这些代码捕获整个屏幕,包括位于视图前方的按钮。我尝试了这些代码,但它只捕获主视图,不包括其子视图:
let view = self.faceTrackerContainerView
let scale = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, scale);
view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
我也从这里尝试了snapshotViewAfterScreenUpdates(true)
,但我不知道如何实现它。我在视图下方有一个collectionView,在视图顶部有一个按钮(两者都不在视图中)。第一个代码使用button,collectionView和子视图捕获所有内容。第二个代码捕获没有子视图的视图。我错过了什么?
答案 0 :(得分:9)
这对我有用,
func screenShotMethod() {
//Create the UIImage
UIGraphicsBeginImageContext(faceTrackerContainerView.frame.size)
faceTrackerContainerView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
答案 1 :(得分:2)
答案 2 :(得分:2)
extension UIView {
func asImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
}
}
它从UIView制作UIImage。然后你可以使用UIImageView(图像:)方法
使用该图像答案 3 :(得分:1)
它不是很优雅,但在截屏之前隐藏视图是有效的。然后,您可以将它们显示出来。
view.isHidden = true
//screenshot
view.isHidden = false
答案 4 :(得分:0)
将所有子视图(要包含在屏幕截图中)添加到一个 父视图。
像这样绘制父视图层次结构:
<块引用> let renderer = UIGraphicsImageRenderer(size: mapParentView.bounds.size)
let image = renderer.image { ctx in
mapParentView.drawHierarchy(in: mapParentView.bounds, afterScreenUpdates: true)
}