サブビューでビューをキャプチャしたいと思います。私はこのコードを使用して画面をキャプチャしています:
_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があり、ビューの上にボタンがあります(どちらもビューにはありません)。最初のコードは、ボタン、collectionView、およびサブビューですべてをキャプチャします。 2番目のコードは、サブビューなしでビューをキャプチャします。何が足りないのですか?
これは私のために働いています、
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)
}
snapshotView(afterScreenUpdates:)
を呼び出さないのはなぜですか?
extension UIView {
func asImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
}
}
UIViewからUIImageを作成します。次に、その画像をUIImageView(image :)メソッドで使用できます
あまりエレガントではありませんが、スクリーンショットを撮る前にビューを非表示にすることはできます。その後、それらを表示することができます。
view.isHidden = true
//screenshot
view.isHidden = false