我的ScrollView中只加载了2页

时间:2015-07-12 12:06:20

标签: swift scrollview

我已经按照Ray Wenderlich教程创建了一个分页ScrollView。但是我似乎遇到了一些问题......

运行应用时,似乎只加载了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()
     }
    }

1 个答案:

答案 0 :(得分:0)

你应该把

scrollView.delegate = self
在viewDidLoad()