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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

226閲覧

scrollViewについての質問

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2017/07/22 03:32

編集2017/07/22 04:14

現在、簡単な加工アプリを作っています
カメラロールや、カメラで選択した画像をscrollViewに表示させ、横スクロールできるものを作る予定です。
元の画像を、scrollViewの先頭に持っていき(コード上では1番目と書いています)、フィルターをかけたものを後ろに(コード上では2番目と書いています)持っていきたいです

画像を決まってる訳ではないため元画をimageViewに、フィルターをかけたものを、
imageView1に表示させるようにし、配列を作りその順番でscrollViewに表示させるようにしました。(カメラを起動するコードなど問題ないコードも全てかくと、かなりのコード量になるので省かせました。)また、imageViewもimageView1もscrollViewにaddviewしてあります

import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var imageView1: UIImageView! //フィルターをかけるための元となる画像 var beforeImage : UIImage! var uiimage: [UIImage] = [] var imageView01: [UIImageView?] = [] override func viewDidLoad() { super.viewDidLoad() // 配列を設定 let uiimage = [UIImage(named:"imageView")!, UIImage(named:"imageview1")!] // UIImageViewにUIIimageを追加 let imageView01 = [UIImageView(image:uiimage[0]),//ここにエラーがでる UIImageView(image:uiimage[1])] // 全体のサイズ ScrollViewフレームサイズ取得 let SVSize = scrollView.frame.size // 画像サイズ x 3 高さ CGSize(240*3, 240) scrollView.contentSize = CGSize(width:SVSize.width * CGFloat(uiimage.count), height:SVSize.height) //UIImageViewのサイズと位置を決める //左右に並べる for i in 0...1 { var x:CGFloat = 0 let y:CGFloat = 0 let width:CGFloat = 240 let height:CGFloat = 240 if i == 0 { //x = 0 } else if i == 1 { x = 240 } // Scrollviewに追加 imageView01[i].frame = CGRect(x:x, y:y, width:width, height:height) // Scrollviewに追加 scrollView.addSubview(imageView01[i]) } // 1ページ単位でスクロールさせる scrollView.isPagingEnabled = true //scroll画面の初期位置 scrollView.contentOffset = CGPoint(x:0, y:0); //二つ目のところはフィルターをかける let filterImage: CIImage = CIImage(image: beforeImage)! //フィルターの設置 filter = CIFilter(name: "CIColorControls")! filter.setValue(filterImage, forKey: kCIInputImageKey) //彩度の調整 filter.setValue(1.0, forKey: "inputSaturation") //明度の調整 filter.setValue(0.5, forKey: "inputBrightness") //コントラストの調整 filter.setValue(2.5, forKey: "inputContrast") let ctx = CIContext(options: nil) let cgImage = ctx.createCGImage(filter.outputImage!, from: filter.outputImage!.extent) imageView1.image = UIImage(cgImage: cgImage!) } //カメラ、カメラロールを使ったときに選択した画像を1枚目に表示するメゾット func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ imageView.image = info[UIImagePickerControllerEditedImage]as? UIImage beforeImage == imageView.image dismiss(animated: true, completion: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

コードにも書きましたが、

// UIImageViewにUIIimageを追加
let imageView01 = [UIImageView(image:uiimage[0]),
UIImageView(image:uiimage[1])]

ここに、『Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)』というエラーが出ます

解決法を教えていただけると幸いです

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

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

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

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

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

guest

回答1

0

ベストアンサー

そのままコピペして実行してみたところ、filterというプロパティが
定義されてないのでビルドできませんでしたが、そのあたりを削除して
実行してみたところ、正常に実行できました。

右下のデバッグエリアに、どのようなエラーメッセージが出ていますか?
そこを見れば何かわかるかもしれません。

投稿2017/07/22 12:01

TakeOne

総合スコア6299

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

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

退会済みユーザー

退会済みユーザー

2017/07/22 12:17

なるほど fatal error: unexpectedly found nil while unwrapping an Optional value とでます
TakeOne

2017/07/22 12:33

fatal error: unexpectedly found nil while unwrapping an Optional value でしたら、その行では発生しそうには思えません。 その前の行の let uiimage = [UIImage(named:"imageView")!, UIImage(named:"imageview1")!] で、"imageView"とか"imageView1"といったファイル名の画像が 存在しなくてUIImage(named:)がnilになって落ちたという可能性は ないでしょうか? はっきりしなければ、 let image1 = UIImage(named:"imageView") let image2 = UIImage(named:"imageView1") let uiimage = [image1!, image2!] という形に修正して、落ちたときのimage1やimage2がnilになってないか 確認してみるとよいと思います。
退会済みユーザー

退会済みユーザー

2017/07/22 12:42

ご指摘通り、 let image1 = UIImage(named:"imageView") let image2 = UIImage(named:"imageView1") let uiimage = [image1!, image2!] というように変えましたが、相変らず『fatal error: unexpectedly found nil while unwrapping an Optional value』というエラーが出てしまいます、、、
退会済みユーザー

退会済みユーザー

2017/07/22 12:43

nilの場合はどのように対処すればいいのですか?
TakeOne

2017/07/22 13:03

image1がnilなのかimage2がnilなのか確認してください。 画像のファイル名は"imageView"とか"imageView1"とかで本当に正しいんですか? 正しいなら、その画像ファイルがアプリにバンドルされるようになっているか確認してください。
退会済みユーザー

退会済みユーザー

2017/07/22 13:18

両方ともnilです あ、今回に関しては、画像が決まってる訳ではないため(使用者がカメラロールから画像を引っ張ってくるから)そのままUIImageViewを置いてそれで配列を組み、その時に応じてUIImageViewに画像を入れようとしてます まずかったですかね?
TakeOne

2017/07/22 13:45

実際はカメラロールから画像を取ってくる予定なのかもしれませんが、 今質問しているコードは、2つの画像をUIImage(named:)で読み込んで その2つの画像をscrollViewの中で横に並べてスクロール表示できるか どうかテストするコードですよね? であれば、ちゃんとテスト用の画像を設定しないとテストできるわけありません。 UIImage(named:)に指定したファイル名の画像がないからエラーになって 止まっているんですよ。そのことが理解できていますか?
退会済みユーザー

退会済みユーザー

2017/07/22 14:23

あ、なるほど 二つのテスト用の画像をimageviewとimageview1に入れたのですが、同じく fatal error: unexpectedly found nil while unwrapping an Optional valueというエラーが出てきてしまいます 尚、両方ともnilのことには変わりありません
退会済みユーザー

退会済みユーザー

2017/07/22 14:31

あ、失礼いたしました 僕のミスだったようです、image、image1は両方ともnilじゃないですが、相変らず、今までのエラーで落ちてしまいます
退会済みユーザー

退会済みユーザー

2017/07/22 14:38

Filterについてのコードを消したら、落ちずにできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問