상황
- 웹뷰를 로드한 직후, 웹뷰를 스냅샷을 찍어 이미지로 저장하고자 함
방법
- WKNavigationDelegate 를 채택한뒤 webView(_:didFinish:) 메서드에 스냅샷 함수를 호출
과정
- WKNavigationDelegate 채택 및 위임 설정
- webView(_:didFinish:) 메서드가 웹뷰가 로드되면 작동함
- snapshot 함수 호출
- 이미지 뷰 및 레이블에 해당 이미지와 타이틀 설정
내용
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let config = WKSnapshotConfiguration()
// config.rect = CGRect(x: 0, y: 0, width: 150, height: 150)
config.snapshotWidth = 150
webView.takeSnapshot(with: config) { (snapImage, error) in
if error == nil {
guard let myImage = snapImage else { return }
self.imageView.image = myImage
guard let guardTitle = self.webView.title else { return }
self.webViewLabel.text = guardTitle
}
}
}
이슈
- 만약 웹뷰가 숨김 상태라면 (webView.isHidden = true) 시뮬레이터에서는 스냅샷이 작동하지만 디바이스, 기기에서는 작동하지 않았다. (Xcode 10.2, iOS 12.4) 웹뷰를 화면 밖으로 꺼내놓아 작동시킴 (윈도우 밖에 위치시킴)
더 확인해 볼 내용
- WKUIDelegate 와 WKNavigationDelegate의 작동 내용
- webView(_:createWebViewWith:for:windowFeatures:) 로 새 웹뷰를 만드는 과정
API Reference:
- Protocol WKNavigationDelegate
- Protocol WKUIDelegate