現在、簡単な加工アプリを作っています
カメラロールや、カメラで選択した画像を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)』というエラーが出ます
解決法を教えていただけると幸いです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/22 12:17
2017/07/22 12:33
退会済みユーザー
2017/07/22 12:42
退会済みユーザー
2017/07/22 12:43
2017/07/22 13:03
退会済みユーザー
2017/07/22 13:18
2017/07/22 13:45
退会済みユーザー
2017/07/22 14:23
退会済みユーザー
2017/07/22 14:31
退会済みユーザー
2017/07/22 14:38