我在我的应用程序中使用scrollview创建了一个自动滚动横幅。滚动视图中添加了3个图像,因此我希望当滚动到达最后一个图像时,它应该从第一个图像开始并继续滚动,并且应该重复此过程。
现在发生的事情是它到达最后一个图像后,scrollview停止滚动。
以下是我的代码:
func setUpScrollView() {
let numberOfViews : Int = 3;
for i in 0...numberOfViews-1{
let origin = CGFloat(i) * (self.view?.frame.size.width)!
let height : CGFloat
height = (self.bannerScrollView?.frame.size.height)!
let image : UIImageView = UIImageView.init(frame: CGRect(x : origin,y : 0.0,width : (self.view?.frame.size.width)!,height : height))
image.image = UIImage.init(named: String.init(format: "banner%d", i+1))
image.contentMode = UIViewContentMode.scaleToFill
self.bannerScrollView?.addSubview(image)
}
self.bannerScrollView?.contentSize = CGSize(width: self.view.frame.size.width * CGFloat(numberOfViews), height: (self.bannerScrollView?.frame.size.height)!)
self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)
self.pageControl = UIPageControl.init(frame: CGRect.zero)
self.pageControl?.numberOfPages = 3
self.pageControl?.isEnabled = false
self.bannerScrollView?.addSubview(self.pageControl!)
}
func autoScroll() {
let targetXOffset = (self.bannerScrollView?.contentOffset.x)! + (self.bannerScrollView?.bounds.size.width)!
if targetXOffset <= CGFloat(((self.bannerScrollView?.contentSize.width)! - (self.bannerScrollView?.bounds.size.width)!)) {
self.bannerScrollView?.setContentOffset(CGPoint(x: targetXOffset,y: 0), animated: true)
}
let width : CGFloat = (self.bannerScrollView?.frame.size.width)!
let page = ((self.bannerScrollView?.contentOffset.x)! + width)/width
}
答案 0 :(得分:0)
func autoScroll() {
guard let scrollView = bannerScrollView else { return }
let width: CGFloat = scrollView.bounds.width
let targetXOffset = scrollView.contentOffset.x + width
if targetXOffset <= CGFloat((scrollView.contentSize.width - width)) {
scrollView.setContentOffset(CGPoint(x: targetXOffset, y: 0), animated: true)
} else {
scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
}
let page = (scrollView.contentOffset.x + width)/width
//need to do something with this page value
}
小心所有那些!
- 他们正在等待炸毁你
答案 1 :(得分:0)
您需要做的只是模拟无限滚动体验。
您希望将第一张图片复制到滚动视图的末尾,这样您就可以拥有4张图片,即第一张和最后一张图片。
开始自动滚动时,检查是否在重复的第4页上。如果是,则将内容偏移设置回(0, 0)
而不设置动画(这对用户来说不明显,因为它们是相同的)然后只是动画到第二个图像,然后重复。