UIView
をUIImageView
にキャプチャするために使用した拡張機能です。あなたが提案した通りに解決策にはUIReplicatView
の使用が含まれていません。しかし、それは私たちのために素晴らしい仕事をしています:
extension UIView {
// Note: only return the image after viewDidAppear called
func takeScreenShot() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, UIScreen.main.scale)
if let scrollView = self as? UIScrollView {
let offset = scrollView.contentOffset
UIGraphicsGetCurrentContext()?.translateBy(x: -offset.x, y: -offset.y);
}
drawHierarchy(in: bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}