2015-07-12 16 views
1

我按照Ray Wenderlich教程創建了分頁ScrollView。不過,我似乎遇到了一些問題...我的ScrollView中只加載2頁

當我運行應用程序時,只有2個圖像(頁面)似乎加載。然後,即使我可以通過它們「滾動」,接下來的3也不會出現。我試圖刪除一個清除功能,將刪除不需要的照片,因爲它是「懶惰」加載。

另外,我的pageControl也不起作用。儘管我已經用調試器進行了測試,並且該變量確實存在。

class PagedScrollViewController: UIViewController, UIScrollViewDelegate { 

    @IBOutlet var scrollView: UIScrollView! 
    @IBOutlet var pageControl: UIPageControl! 

    var pageImages: [UIImage] = [] 
    var pageViews: [UIImageView?] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // 1 
     pageImages = [UIImage(named: "photo1.png")!, 
      UIImage(named: "photo2.png")!, 
      UIImage(named: "photo3.png")!, 
      UIImage(named: "photo4.png")!, 
      UIImage(named: "photo5.png")!] 

     let pageCount = pageImages.count 

     // 2 
     pageControl.currentPage = 4 
     pageControl.numberOfPages = pageCount 

     // 3 
     for _ in 0..<pageCount { 
      pageViews.append(nil) 
     } 

     // 4 
     let pagesScrollViewSize = scrollView.frame.size 
     scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(pageImages.count), 
      height: 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 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))) 

     // Update the page control 
     pageControl.currentPage = page 

     // Work out which pages you want to load 
     let firstPage = page - 1 
     let lastPage = page + 1 


     // Load pages in our range 
     for index in firstPage...lastPage { 
      loadPage(index) 
     } 

    } 

    func scrollViewDidScroll(scrollView: UIScrollView) { 
     // Load the pages that are now on screen 
     loadVisiblePages() 
    } 
    } 

回答

0

你應該把

scrollView.delegate = self 

在您的viewDidLoad()