🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1597閲覧

スクショ画像を遷移先の画面に渡す

shiosako

総合スコア6

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/11/07 16:38

編集2019/11/07 16:47

まずカメラの映像をUIViewに写し、その部分をスクリーンショットしてUIImage
にします。
そして別のViewControllerにその画像をuser defaultを利用して渡したいと考えています。
ですが、画像が渡せていないのか、スクリーンショットがうまくできていないのか
遷移先のViewControllerで画像を表示させることができません。
エラーは出ていません。

ViewController

swift

1 //画像send 2 let defaults = UserDefaults.standard 3 var capturedImage: UIImage! 4 5 //画像キャプチャー 6 func getScreenShot(windowFrame: CGRect) -> UIImage { 7 8 UIGraphicsBeginImageContextWithOptions(windowFrame.size, false, 0.0) 9 10 self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true) 11 //let context: CGContext = UIGraphicsGetCurrentContext()! 12 //self.view.layer.render(in: context) 13 capturedImage = UIGraphicsGetImageFromCurrentImageContext()! 14 UIGraphicsEndImageContext() 15 16 return capturedImage 17 } 18 //savebutton 19 @IBAction func saveButton(_ sender: Any) { 20 capturedImage = getScreenShot(windowFrame: self.cameraView.bounds) 21 defaults.UIImageToData(image: capturedImage, forKey: "image") 22 // sendSaveImage() 23 } 24} 25 extension UserDefaults { 26 // 保存したいUIImage, 保存するUserDefaults, Keyを取得 27 func UIImageToData(image: UIImage, forKey: String) { 28 // UIImageをData型へ変換 29 let nsdata = image.pngData() 30 // UserDefaultsへ保存 31 self.set(nsdata, forKey: forKey) 32 } 33 // 参照するUserDefaults, Keyを取得, UIImageを返す 34 func getImageData(forKey: String) -> UIImage { 35 // UserDefaultsからKeyを基にData型を参照 36 let data = self.data(forKey: forKey) 37 // UIImage型へ変換 38 let returnImage = UIImage(data: data!) 39 // UIImageを返す 40 return returnImage! 41 } 42 }

ViewController2

@IBOutlet weak var cameraView: UIImageView! //画像取得 let defaults = UserDefaults.standard override func viewDidLoad() { super.viewDidLoad() // self.view.backgroundColor = UIColor.init(red: 230/255, green: 255/255, blue: 230/255, alpha: 90/100) capturedImage = defaults.getImageData(forKey: "image") let rect = cameraView.frame imageView = UIImageView(frame:rect) imageView.contentMode = .scaleAspectFit imageView.image = capturedImage imageView.center = self.cameraView.center self.cameraView.addSubview(imageView) } @IBAction func saveButton(_ sender: Any) { let image = mergeImage(windowFrame: cameraView.frame) UIImageWriteToSavedPhotosAlbum(image,self,#selector(self.didFinishSavingImage(_:didFinishSavingWithError:contextInfo:)),nil) } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ViewController2 の

let rect = cameraView.frame

let rect = cameraView.bounds

の間違いだったりしませんかね?


AutoLayoutを使っているのでしたら上記の修正でも駄目だった気がするので(viewDidLoad内ではframeは確定しないため)、
imageViewをコードではなくStoryboardで生成してoutlet経由で操作したらどうでしょう?

投稿2019/11/08 02:12

編集2019/11/08 02:16
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問