2015-04-22 73 views
1

我一直在努力解决我的应用程序内的一个特定问题几天,但没有成功。我有一个UIScrollView,它基本上和App Store中用来显示屏幕截图一样。从UIScrollView丢失的图像

我遇到的问题是,由于某种原因,只有两个图像正在显示(应该有五个)。我已经证实,这不是图像本身的问题,所以它必须与代码有关。奇怪的是,我的应用程序中实际上有另一个UIScrollView,几乎完全相同,但有三个标签,并且工作正常。

这里是我的代码:

覆盖FUNC awakeFromNib(){ super.awakeFromNib()

sixPlusImages = [ 
     UIImage(named: "Glance6Plus.png")!, 
     UIImage(named: "Format6Plus.png")!, 
     UIImage(named: "Swipe6Plus.png")!, 
     UIImage(named: "Currencies6Plus.png")!, 
     UIImage(named: "Search6Plus.png")! 
    ] 

    let pageCount = sixPlusImages.count 

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

    let pagesScrollViewSize = scrollView.frame.size 
    scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(sixPlusImages.count), height: pagesScrollViewSize.height) 

    loadVisiblePages() 
} 

func loadPage(page: Int) { 
    if page < 0 || page >= pageViews.count { 
     return 
    } 

    if let pageView = pageViews[page] { 
     return 
    } else { 
     var frame = scrollView.frame //CGRect(x: 0, y: 0, width: 200, height: scrollView.bounds.height) 
     frame.origin.x = frame.size.width * CGFloat(page) 
     frame.origin.y = 0.0 

     let newPageView = UIImageView(image: sixPlusImages[page]) 
     newPageView.contentMode = .ScaleAspectFit 
     newPageView.frame = frame 
     scrollView.addSubview(newPageView) 

     pageViews[page] = newPageView 
    } 
} 

func loadVisiblePages() { 
    let pageWidth = scrollView.frame.size.width 
    page = Int(floor((scrollView.contentOffset.x * 2.0 + pageWidth)/(pageWidth * 2.0))) 

    let firstPage = page - 1 
    let lastPage = page + 1 

    for var index = 0; index < firstPage; ++index { 
     purgePage(index) 
    } 

    for index in firstPage...lastPage { 
     loadPage(index) 
    } 

    for var index = lastPage+1; index < sixPlusImages.count; ++index { 
     purgePage(index) 
    } 
} 

func scrollViewDidScroll(scrollView: UIScrollView) { 
    loadVisiblePages() 
} 

func purgePage(page: Int) { 
    if page < 0 || page >= sixPlusImages.count { 
     return 
    } 

    if let pageView = pageViews[page] { 
     pageView.removeFromSuperview() 
     pageViews[page] = nil 
    } 
} 

所以就像我说的,正在显示的前两个图像,但其他三个都只是空白页。

任何人都看到任何问题?

+0

您是否尝试添加任何断点或日志语句以查看哪里出错?例如,loadPage是否曾经为您的缺失图像调用过?另外,最好以“懒惰”的方式进行图像加载(只有当它们实际被查看/滚动时),而不是预先加载整个阵列。 – RehcsifMit

+0

我很困惑你为什么不使用'UITableView' - 它为你处理大部分这些东西。 –

+0

@RehcsifMit我刚刚为loadPage添加了一个'println()',因为某种原因它只被调用了三次。它通过了其他两次,所以这就是为什么只有两个图像被加载。 – user3746428

回答

0

添加UIScrollViewDelegate到类:

class MyViewController: UIViewController, UIScrollViewDelegate { 

} 

然后在故事板,一定要右键点击/拖动从滚动视图,视图控制器,单击委托。