取り出した画像をScrollViewに追加したいです。
取り出した複数の画像をimageView01というimageviewの配列に追加し、それをscrollviewに追加しようとしたのですが、
self.imageView01[i]!.frame = CGRect(x: x, y: y, width: width, height: height)
のところでThread 1: Fatal error: Index out of rangeというエラーが出てしまいます。。
何が問題かがわかりません。
どなたかご教授いただけませんか?
class PostViewController: UIViewController,UIScrollViewDelegate, UINavigationControllerDelegate,UIImagePickerControllerDelegate { var imageView01: [UIImageView?] = [] @IBOutlet var scrollView: UIScrollView! @IBOutlet var pageControl: UIPageControl! var resizedImage: UIImage! var selectedImages : [UIImage] = [] override func viewDidLoad() { super.viewDidLoad() } @IBAction func selectImage() { let alertController = UIAlertController(title: "画像選択", message: "シェアする画像を選択して下さい。", preferredStyle: .actionSheet) let cancelAction = UIAlertAction(title: "キャンセル", style: .cancel) { (action) in alertController.dismiss(animated: true, completion: nil) } let cameraAction = UIAlertAction(title: "カメラで撮影", style: .default) { (action) in // カメラ起動 if UIImagePickerController.isSourceTypeAvailable(.camera) == true { let picker = UIImagePickerController() picker.sourceType = .camera picker.delegate = self self.present(picker, animated: true, completion: nil) } else { print("この機種ではカメラが使用出来ません。") } } let photoLibraryAction = UIAlertAction(title: "フォトライブラリから選択", style: .default) { (action) in // アルバム起動 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) == true { let pickerController = DKImagePickerController() pickerController.delegate = self // 選択可能上限の設定もできます pickerController.maxSelectableCount = 5 pickerController.didSelectAssets = { [unowned self] (assets: [DKAsset]) in // 選択された画像はassetsに入れて返却されますのでfetchして取り出すとよいでしょう for asset in assets { asset.fetchFullScreenImage(completeBlock: { (image, info) in // ここで取り出せます print(image,"画像") self.selectedImages.append(image!) self.imageView01 = [UIImageView(image:image)] }) } // 全体のサイズ ScrollViewフレームサイズ取得 let SVSize = self.scrollView.frame.size // 画像サイズ x 3 高さ CGSizeMake(240*3, 240) self.scrollView.contentSize = CGSize(width: SVSize.width * CGFloat(self.selectedImages.count), height: SVSize.height) //UIImageViewのサイズと位置を決めます //左右に並べる for i in 0...2 { var x:CGFloat = 0 var y:CGFloat = 0 var width:CGFloat = 240 var height:CGFloat = 240 if i == 0 { // x = 0 } else if i == 1 { x = 240 } else if i == 2 { x = 480 } // Scrollviewに追加 self.imageView01[i]!.frame = CGRect(x: x, y: y, width: width, height: height) // Scrollviewに追加 self.scrollView.addSubview(self.imageView01[i]!) //**ここでThread 1: Fatal error: Index out of rangeというエラー** } // 1ページ単位でスクロールさせる self.scrollView.isPagingEnabled = true //scroll画面の初期位置 self.scrollView.contentOffset = CGPoint(x: 0, y: 0); } self.present(pickerController, animated: true) {} } else { print("この機種ではフォトライブラリが使用出来ません。") } } alertController.addAction(cancelAction) alertController.addAction(cameraAction) alertController.addAction(photoLibraryAction) self.present(alertController, animated: true, completion: nil) }
試したこと
調べてみると、配列の要素数が空なのが要員なのかなと思いまして、
var imageView01 = [UIImageView?](repeating: 0/*初期値*/, count: selectedImages.count/*必要な要素数*/)
と書きましたがこれもうまくいきませんでした。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。