Inicie UIScrollView con una image de un índice particular desde otra vista

Tengo una colecciónView con múltiples imágenes. Al tocar en una de ellas, se abre una nueva vista: UIScrollView.

Ahora cada vez que UIScrollView comienza con la primera image de la matriz de collectionView.

Estoy pasando el índice (imageNumber) de la image seleccionada en UIScrollView, pero no sé cómo hacer que la primera image mostrada sea la que tiene el índice.

override func viewDidLoad() { super.viewDidLoad() var numberOfImagesPerALbum = data[albumNumber].count - 1 for index in 0...numberOfImagesPerALbum { pageImages.append(UIImage(named: data[albumNumber][index]["image"]!)!) } var pageCount = pageImages.count // 2 pageControl.currentPage = imageNumber println(imageNumber) pageControl.numberOfPages = pageCount // 3 for _ in 0..<pageCount { pageViews.append(nil) } } override func viewDidLayoutSubviews() { let pagesScrollViewSize = scrollView.frame.size scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(pageImages.count), pagesScrollViewSize.height) // 5 loadVisiblePages() } func loadPage(page: Int) { if page < 0 || page >= pageImages.count { // If it's outside the range of what you have to display, then do nothing return } // 1 if let pageView = pageViews[page] { // Do nothing. The view is already loaded. } else { // 2 var frame = scrollView.bounds frame.origin.x = frame.size.width * CGFloat(page) frame.origin.y = 0.0 3 let newPageView = UIImageView(image: pageImages[page]) newPageView.contentMode = .ScaleAspectFit newPageView.frame = frame scrollView.addSubview(newPageView) // 4 pageViews[page] = newPageView } } func purgePage(page: Int) { if page < 0 || page >= pageImages.count { // If it's outside the range of what you have to display, then do nothing return } // Remove a page from the scroll view and reset the container array if let pageView = pageViews[page] { pageView.removeFromSuperview() pageViews[page] = nil } } func loadVisiblePages() { // First, determine which page is currently visible let pageWidth = scrollView.frame.size.width let page = Int(floor((scrollView.contentOffset.x * 2.0 + pageWidth) / (pageWidth * 2.0))) println("Page is \(page)") imageTitleLabel.text = data[albumNumber][page]["title"] imageDescriptionLabel.text = data[albumNumber][page]["text"] // Update the page control pageControl.currentPage = page // Work out which pages you want to load let firstPage = page - 1 let lastPage = page + 1 // Purge anything before the first page for var index = 0; index < firstPage; ++index { purgePage(index) } // Load pages in our range for var index = firstPage; index <= lastPage; ++index { loadPage(index) } // Purge anything after the last page for var index = lastPage+1; index < pageImages.count; ++index { purgePage(index) } } func scrollViewDidScroll(scrollView: UIScrollView) { // Load the pages that are now on screen loadVisiblePages() } 

Considere usar UICollectionView con UICollectionViewFlowLayout (configure scrollDirection to UICollectionViewScrollDirectionHorizontal ) en lugar de UIScrollView . También establezca la propiedad pagingEnabled en true .

Esto le ahorrará un montón de código innecesario y obtendrá UICollectionView 's - scrollToItemAtIndexPath:atScrollPosition:animated: método "gratis". Esto debería resolver todos tus problemas y hacer que el código sea más limpio. ¡Buena suerte!