質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

725閲覧

画像推移ができません

ay49

総合スコア3

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

1クリップ

投稿2020/06/02 15:05

編集2020/06/03 01:15
先ほどまで画面遷移がうまくいっていたのに突然表示されなくなりました エラーとしてはguard let〜の構文で Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional valueが表示されます どなたか原因がわかる方いたら教えてください 以下推移先のコードです import UIKit import CoreImage import DKImagePickerController class EditViewController: UIViewController { @IBOutlet weak var cameraimageView: UIImageView! @IBOutlet weak var roshutuSlider: UISlider! @IBOutlet weak var roshutuLabel: UILabel! @IBOutlet weak var highlightSlider: UISlider! @IBOutlet weak var highlightLabel: UILabel! @IBOutlet weak var saidoSlider: UISlider! @IBOutlet weak var saidoLabel: UILabel! var originalImage : UIImage! = UIImage() let images = UIImage(named: "originalImage") private var ciFilter: CIFilter! private var ciFilter2: CIFilter! private var ciFilter3: CIFilter! var context : CIContext! var context2 : CIContext! var context3 : CIContext! override func viewDidLoad() { super.viewDidLoad() cameraimageView.image = originalImage } //画面表示された直後に呼び出される、毎回呼び出される override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) cameraimageView.image = originalImage guard let ciImage = originalImage.ciImage ?? CIImage(image: originalImage) else { return } //ハイライトのスライダー highlightSlider.maximumValue = 1 highlightSlider.minimumValue = 0 highlightSlider.value = 1 //露出のスライダー roshutuSlider.maximumValue = 3 roshutuSlider.minimumValue = -3 roshutuSlider.value = 0 //彩度のスライダー saidoSlider.maximumValue = 2 saidoSlider.minimumValue = 0 saidoSlider.value = 1 highlightLabel.text = String(highlightSlider.value) roshutuLabel.text = String(roshutuSlider.value) saidoLabel.text = String(saidoSlider.value) // CIFilterの生成 ciFilter = CIFilter(name: "CIHighlightShadowAdjust") ciFilter2 = CIFilter(name: "CIExposureAdjust") ciFilter3 = CIFilter(name: "CIColorControls") context = CIContext() context2 = CIContext() context3 = CIContext() // 入力画像の設定 ciFilter.setValue(ciImage, forKey: kCIInputImageKey) ciFilter2.setValue(ciImage, forKey: kCIInputImageKey) ciFilter3.setValue(ciImage, forKey: kCIInputImageKey) } @IBAction func valueChanged(_ sender: UISlider) { roshutuLabel.text = String(sender.value) // 露出の設定 ciFilter2.setValue(sender.value, forKey: "inputEV") // Filter適応後の画像を表示 if let originalImage = ciFilter2.outputImage { cameraimageView.image = UIImage(ciImage: originalImage) } } @IBAction func valueChanged2(_ sender: UISlider) { highlightLabel.text = String(sender.value) // ハイライトの設定 ciFilter.setValue(sender.value, forKey: "inputHighlightAmount") // Filter適応後の画像を表示 if let originalImage = ciFilter.outputImage { cameraimageView.image = UIImage(ciImage: originalImage) } } @IBAction func valueChanged3(_ sender: UISlider) { saidoLabel.text = String(sender.value) // 彩度の設定 ciFilter3.setValue(sender.value, forKey: "inputSaturation") // Filter適応後の画像を表示 if let filteredImage = ciFilter3.outputImage { cameraimageView.image = UIImage(ciImage: filteredImage) } } @IBAction func back(){ self.dismiss(animated: true, completion: nil) } @IBAction func savePhoto(){ UIImageWriteToSavedPhotosAlbum(cameraimageView.image!, nil, nil, nil) } } ****推移元のコードを以下に記載します************************ import UIKit import Photos import DKImagePickerController class MakeViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { @IBOutlet var cameraImageView: UIImageView! @IBOutlet var filterButton : UIButton! @IBOutlet var editButton : UIButton! //画像加工するための元となる画像 var originalImage: UIImage! //画像加工するフィルターの宣言 var filter: CIFilter! override func viewDidLoad() { super.viewDidLoad() } //カメラ、カメラロールを使った時に選択した画像をアプリ内に表示するためのメソッド func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){ cameraImageView.image = info[.editedImage] as? UIImage originalImage = cameraImageView.image //カメラで写真撮った後に画像を加工する元画像として記憶しておく dismiss(animated: true, completion: nil) } //撮影した画像を保存するためのメソッド @IBAction func savePhoto(){ UIImageWriteToSavedPhotosAlbum(cameraImageView.image!, nil, nil, nil) } //カメラロールにある画像を読み込むメソッド @IBAction func openAlbum(){ let pickerController = DKImagePickerController() // 選択可能な枚数を20にする pickerController.maxSelectableCount = 20 pickerController.didSelectAssets = { [unowned self] (assets: [DKAsset]) in // 選択された画像はassetsに入れて返却されるのでfetchして取り出す for asset in assets { asset.fetchFullScreenImage(completeBlock: { (image, info) in // ここで取り出せる self.cameraImageView.image = image }) } } self.present(pickerController, animated: true) {} performSegueToEdit() performsegueToFilter() } func performSegueToEdit(){ performSegue(withIdentifier: "toEditViewController", sender: nil) } func performsegueToFilter(){ performSegue(withIdentifier: "toFilterViewController", sender: nil) } @IBAction func back(){ self.dismiss(animated: true, completion: nil) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "toEditViewController"{ let EditViewController: EditViewController = segue.destination as! EditViewController EditViewController.originalImage = self.originalImage }else if segue.identifier == "toFilterViewController"{ let FilterViewController: FilterViewController = segue.destination as! FilterViewController FilterViewController.originalImage = self.originalImage } } }

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

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

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

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

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

hoshi-takanori

2020/06/02 19:35

originalImage の中身が空なのが気になりますが、その guard let では落ちはしないと思うのですが…。
TsukubaDepot

2020/06/03 00:45

このコードだけ見ると落ちないように見えますが、実はこのクラスは別の画面からの遷移先でではありませんでしょうか。また、その遷移元でoriginalImageを書き換えてたりしないでしょうか(遷移元でnilを入れてしまえば落ちるので)。
ay49

2020/06/03 01:21

@hoshiーtakanori様 @TsukubaDepot様 お二人の方ご指摘ありがとうございます こちらが推移先のコードだっため推移元のコードも記載しました。 推移元のコードで、「画像を複数枚選択可能にしよう」と思いDKImagePickerControllerを入れてから画面推移ができなくなったという状況です。 もし改善策がわかりましたら教えていただけると幸いです。
TsukubaDepot

2020/06/03 01:39

下記のコード @IBAction func openAlbum(){ //中略 self.present(pickerController, animated: true) {} performSegueToEdit() performsegueToFilter() } この部分ですが、これはコピーミスでしょうか。 このままだとDKImagePickerControllerの画面が開いた上、2つのSegueを処理するような流れになってしまい、想定通りの動作にはならないと思います(試した感じ、少なくとも遷移先の画面は表示されません)。
hoshi-takanori

2020/06/03 01:41

MakeViewController で originalImage が nil のまま EditViewController に遷移すれば EditViewController の originalImage も nil になりますね。 改善策としては、@IBOutlet 以外のプロパティには ! を使わず、ちゃんと nil の対応をすることでしょうか。 あと、感想ですが、prepare(for segue:) で変数名にクラス名と同じ EditViewController というのを使っていてびっくりしました。そんなことできるんですね…。
TsukubaDepot

2020/06/03 02:38

var Int: Int = 0 もできるみたいですね..
guest

回答1

0

自己解決

TsukubaDepot様、hoshi-takanori様
アドバイスをくださりありがとうございます
お二人のご指摘に従いコードを直していたところ、無事に画面推移することができました
お力をお貸しくださりありがとうございました。

投稿2020/06/07 17:17

ay49

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問