循环滚动原理很简单,注释中可以看到
//
// ViewController.swift
//
import UIKit
class ViewController: UIViewController,UIScrollViewDelegate {
let _widthSV:CGFloat = UIScreen.mainScreen().bounds.size.width - 20
let _heightSV:CGFloat = 200
let _scrollView:UIScrollView = UIScrollView()
//图片循环滚动原理
//两边各加一张图片,按照 1 2 3 4 5 6 顺序对应下面六张图片
//当滚动至6时触发函数 scrollViewDidScroll 中的条件语句 s2 让画面在感觉不到的情况下跳转至2
//当滚动至1时触发函数 scrollViewDidScroll 中的条件语句 s1 让画面在感觉不到的情况下跳转至5
let picNames:NSArray = NSArray(array: ["pic4", "pic1", "pic2", "pic3", "pic4", "pic1"])
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.addSubview(_scrollView)
_scrollView.frame = CGRectMake(10, 50, _widthSV, _heightSV)
for var i = 0; i < picNames.count; i++ {
let nameStr:NSString = picNames[i] as! NSString
let imageView:UIImageView = UIImageView(frame: CGRectMake(CGFloat(i) * _widthSV, 0, _widthSV, _heightSV))
let imageFileStr:NSString = NSBundle.mainBundle().pathForResource(nameStr as String, ofType: "jpg")!
imageView.image = UIImage(contentsOfFile: imageFileStr as String)
_scrollView.addSubview(imageView)
}
_scrollView.contentSize = CGSizeMake(CGFloat(picNames.count) * _widthSV, 0)
_scrollView.pagingEnabled = true
_scrollView.contentInset = UIEdgeInsetsZero
_scrollView.setContentOffset(CGPointMake(_widthSV, 0), animated: false)
_scrollView.delegate = self
_scrollView.showsHorizontalScrollIndicator = false //不显示滚动条
}
func scrollViewDidScroll(scrollView: UIScrollView) {
let point = scrollView.contentOffset
if Int(point.x) == 0 { //s1
scrollView.setContentOffset(CGPointMake(_widthSV * CGFloat(picNames.count - 2), 0), animated: false)
}else if Int(point.x) == Int(_widthSV * CGFloat(picNames.count - 2 + 1)) { // s2
scrollView.setContentOffset(CGPointMake(_widthSV, 0), animated: false)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}