前提・実現したいこと
SwiftでiPhoneの写真アプリを作成しており、現在写真一覧から写真を選択した時にその写真を単体で拡大表示し、横スワイプで前後の写真に切り替えられる機能を実装しようとしております。(一般的な写真アルバムでみられるような写真を選択して開いたのちに、左右にスワイプすることで前後の写真に切り替えられる機能です)
発生している問題・エラーメッセージ
写真が格納されている配列から選択した写真をUIPageControlの開いた時に表示されるページに格納したい(10個格納されている配列の5番目の写真であれば、10ページ中5ページ目が開かれてほしい)のですが、必ず配列の一番最初の写真が表示されてしまいます。(5番目の写真を選んでも、1枚目が表示される10ページ中1ページ目が開かれてしまいます)
UIPageControlのcurrentPageに設定されたページが開かれると認識していますが、間違っていますでしょうか?
もし間違っていましたら、他にそのような挙動にする方法がありましたら、ご教示いただけますと大変助かります。
どうぞよろしくお願いいたします。
該当のソースコード
storyboard上は、ScrollView - View - PageControlの構成になっております。
@IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var pageControl: UIPageControl! var photoUrlDatas = [FilmData]()//前のページから写真全てのファイルパスが格納されております var numberOfImages = Int()//photoUrlDatasの配列の要素の数が入っています var currentPage = Int() //前のページから開いた写真が配列の何番目かを渡しています override func viewDidLoad() { super.viewDidLoad() setupPageControl() } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() setupScrollView() (0..<numberOfImages).forEach { page in let subScrollView = generateSubScrollView(at: page) scrollView.addSubview(subScrollView) let imageView = generateImageView(at: page) subScrollView.addSubview(imageView) } private func setupPageControl() { pageControl.numberOfPages = numberOfImages pageControl.currentPage = currentPage pageControl.addTarget( self, action: #selector(didValueChangePageControl), for: .valueChanged ) } private func setupScrollView() { scrollView.delegate = self scrollView.isPagingEnabled = true scrollView.showsVerticalScrollIndicator = false scrollView.showsHorizontalScrollIndicator = false scrollView.contentSize = CGSize( width: calculateX(at: numberOfImages), height: scrollView.bounds.height ) } private func generateImageView(at page: Int) -> UIImageView { let frame = scrollView.bounds let imageView = UIImageView(frame: frame) imageView.contentMode = .scaleAspectFit imageView.clipsToBounds = true guard photoUrlDatas.indices.contains(page)else{return imageView} let storageRef = Storage.storage().reference(forURL: "gs://snappin-57194.appspot.com/") let photoImageRef = storageRef.child(photoUrlDatas[page].filePath ?? "no filepath") imageView.sd_setImage(with: photoImageRef) return imageView } } ・・・
回答1件
あなたの回答
tips
プレビュー