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
}
}
所以就像我说的,正在显示的前两个图像,但其他三个都只是空白页。
任何人都看到任何问题?
您是否尝试添加任何断点或日志语句以查看哪里出错?例如,loadPage是否曾经为您的缺失图像调用过?另外,最好以“懒惰”的方式进行图像加载(只有当它们实际被查看/滚动时),而不是预先加载整个阵列。 – RehcsifMit
我很困惑你为什么不使用'UITableView' - 它为你处理大部分这些东西。 –
@RehcsifMit我刚刚为loadPage添加了一个'println()',因为某种原因它只被调用了三次。它通过了其他两次,所以这就是为什么只有两个图像被加载。 – user3746428