iPoneの標準機能と似たような機能を作成したいと考えております。
スクリーンショットを撮ったことを検知して、webView全体をimageViewに表示し、これをタップした際に保存するといった処理をしたいのですが、webview全体を取得できず、以下の画像のようになってしまいました。
原因がわからないので、何かアドバイスいただけると助かります。
また以下のメソッドを使ってもうまくいきませんでした。
https://developer.apple.com/documentation/webkit/wkwebview/2873260-takesnapshot
ソースコードを以下に示します。
swift
1// 2// ViewController.swift 3// ScreenShotSample 4// 5 6import UIKit 7import WebKit 8 9class ViewController: UIViewController { 10 11 @IBOutlet weak var sampleWebView: WKWebView! 12 @IBOutlet weak var screenShot: UIImageView! 13 let homeUrl = "https://qiita.com/trend" 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 openUrl(urlString: homeUrl) 19 NotificationCenter.default.addObserver(self, 20 selector: #selector(ViewController.didTakeScreenshot(notification:)), 21 name: UIApplication.userDidTakeScreenshotNotification, 22 object: nil) 23 } 24 25 deinit { 26 NotificationCenter.default.removeObserver(self) 27 } 28 29 // UIApplicationUserDidTakeScreenshot の通知を受けて実行される 30 @objc func didTakeScreenshot(notification: Notification) { 31 print("shot") 32 print(sampleWebView.scrollView.contentSize.height) 33 print(sampleWebView.scrollView.contentSize.width) 34 let image = sampleWebView.GetImage() 35 print(image) 36 screenShot.image = image 37 screenShot.isUserInteractionEnabled = true 38 screenShot.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.saveImage(_:)))) 39 } 40 41 42 func openUrl(urlString: String){ 43 let url = URL(string: urlString) 44 let urlRequest = URLRequest(url: url!) 45 sampleWebView.load(urlRequest) 46 } 47 48 @objc func saveImage(_ sender: UITapGestureRecognizer) { 49 50 // クリックした UIImageView を取得 51 let targetImageView = sender.view! as! UIImageView 52 53 // その中の UIImage を取得 54 let targetImage = targetImageView.image! 55 56 // UIImage の画像をカメラロールに画像を保存 57// UIImageWriteToSavedPhotosAlbum(targetImage, self) 58 UIImageWriteToSavedPhotosAlbum(targetImage, self, nil, nil) 59 } 60} 61 62extension WKWebView { 63 func GetImage() -> UIImage{ 64 65 // キャプチャする範囲を取得. 66 let size = CGSize(width: self.scrollView.contentSize.width, height: self.scrollView.contentSize.height) 67 68 // ビットマップ画像のcontextを作成. 69 UIGraphicsBeginImageContextWithOptions(size, false, 0.0) 70 let context: CGContext = UIGraphicsGetCurrentContext()! 71 72 // 対象のview内の描画をcontextに複写する. 73 self.layer.render(in: context) 74 75 // 現在のcontextのビットマップをUIImageとして取得. 76 let capturedImage : UIImage = UIGraphicsGetImageFromCurrentImageContext()! 77 78 // contextを閉じる. 79 UIGraphicsEndImageContext() 80 81 return capturedImage 82 } 83} 84 85
以下のように途切れてしまいます
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/02 07:13
退会済みユーザー
2018/10/03 10:10 編集
退会済みユーザー
2018/10/05 17:10