0
我有一个分页的UIScrollView,它自动向左滚动,每隔5秒按顺序放置4个UIImage视图。当滚动视图到达第4个图像视图时,它会一直滚动回第一个图像视图并重新开始。如何制作带有图像视图的无限分页滚动视图?
什么是创建无限滚动视图幻觉的最佳方法?换句话说,而不是滚动视图可以返回,我只是希望它继续向前滚动,当它到达第4个图像视图时,它向前滚动并且图像视图#1在那里。
我以为只是重新添加图像意见和增大滚动视图的内容大小时滚动视图达到4图像但不会很聪明...... IDK的
这里是到目前为止我的代码:
我声明:
var pageImages = [UIImage]()
var pageViews: [UIImageView?] = []
var scrollTimer = NSTimer()
@IBOutlet weak var carousel: UIScrollView!
在viewDidLoad中():
pageImages = [UIImage(named: "featured_1.png")!,
UIImage(named: "featured_2.png")!,
UIImage(named: "featured_3.png")!,
UIImage(named: "featured_4.png")!]
for _ in 0..<pageImages.count
pageViews.append(nil)
}
var pagesScrollViewSize = carousel.frame.size
carousel.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(pageImages.count),
height: pagesScrollViewSize.height)
loadVisiblePages()
而由定时器调用的函数每5秒:
func scrollToImage() {
let x = carousel.contentOffset.x
if (x <= (carousel.frame.width * CGFloat(pageImages.count))/2) {
UIView.animateWithDuration(1, animations: {
self.carousel.contentOffset = CGPointMake(x+self.carousel.frame.width, 0)
})
} else {
UIView.animateWithDuration(1, animations: {
self.carousel.contentOffset = CGPointMake(self.pageViews[0]!.frame.origin.x, 0)
})
}
}
最后的助手函数来做大量的工作:
func loadPage(page: Int) {
if page < 0 || page >= pageImages.count {
return
}
if let pageView = pageViews[page] {
} else {
var frame = carousel.bounds
frame.origin.x = frame.size.width * CGFloat(page)
frame.origin.y = 0.0
let newPageView = UIImageView(image: pageImages[page])
newPageView.contentMode = UIViewContentMode.ScaleToFill
newPageView.frame = frame
carousel.addSubview(newPageView)
pageViews[page] = newPageView
}
}
func loadVisiblePages() {
let pageWidth = carousel.frame.size.width
let page = Int(floor((carousel.contentOffset.x * 2.0 + pageWidth)/(pageWidth * 2.0)))
let firstPage = page
let lastPage = page + 3
for index in firstPage...lastPage {
loadPage(index)
}
}
这个,我建议你看这个[WWDC视频](https://developer.apple.com/videos/wwdc/2011/?id=104),它演示了如何达到这个效果。 – sikhapol
这实际上并不奏效,但感谢您的帮助和时间!第一个图像视图滚动到下一个图像,然后滚动查看闪烁类型,然后我们回到第一个图像视图。这是第一个和第二个图像视图之间的一个不稳定的循环 – cyril
我很抱歉,其中一个功能有错误,我没有看到它,因为我的所有图像看起来都一样。这现在工作100%,检查我所做的编辑,它取代了moveLeftEnd()函数。 –