import UIKit
let ImageViewCount = 3
class XGHomeHeadView: UIView {
var scrollView: UIScrollView?
var pageControl: UIPageControl?
var timer: NSTimer?
var banners: Array<AnyObject>? {
didSet {
pageControl?.numberOfPages = (banners?.count)!
pageControl?.currentPage = 0
updateContent()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setupScrollView()
startTimer()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupScrollView() {
scrollView = UIScrollView(frame: self.bounds)
scrollView?.showsVerticalScrollIndicator = false
scrollView?.showsHorizontalScrollIndicator = false
scrollView?.pagingEnabled = true
scrollView?.delegate = self
self.addSubview(scrollView!)
for _ in 0..<ImageViewCount {
let imgView = UIImageView()
imgView.userInteractionEnabled = true
imgView.contentMode = UIViewContentMode.ScaleAspectFill
imgView.clipsToBounds = true
let ges = UITapGestureRecognizer(target: self, action: #selector(imgViewDidClicked(_:)))
imgView.addGestureRecognizer(ges)
scrollView?.addSubview(imgView)
}
pageControl = UIPageControl()
self.addSubview(pageControl!)
scrollView?.contentSize = CGSizeMake(CGFloat(ImageViewCount)*self.bounds.width, 0)
let scrollWiewW = scrollView!.bounds.width
let scrollWiewH = scrollView!.bounds.height
for i in 0..<ImageViewCount {
let imgView = scrollView?.subviews[i]
imgView?.frame = CGRectMake(CGFloat(i) * scrollWiewW, 0, scrollWiewW, scrollWiewH);
}
let pageW: CGFloat = 80.0
let pageH: CGFloat = 20.0
pageControl?.frame = CGRectMake(0, 0, pageW, pageH)
pageControl?.center = CGPointMake(scrollWiewW/2, scrollWiewH-pageH/2)
}
func updateContent() {
for subView in (scrollView?.subviews)!.enumerate() {
var pageIndex:Int = (pageControl?.currentPage)!
let imgIndex = subView.index
let imgView = subView.element as! UIImageView
if imgIndex == 0 {
pageIndex -= 1
} else if imgIndex == 2 {
pageIndex += 1
}
if pageIndex < 0 {
pageIndex = (pageControl?.numberOfPages)!-1
} else if pageIndex >= pageControl?.numberOfPages {
pageIndex = 0
}
imgView.tag = pageIndex
let banner = banners![pageIndex] as! XGBanner
let image = UIImage(named: banner.image!)
imgView.image = image
}
scrollView?.contentOffset = CGPointMake(scrollView!.bounds.width, 0)
}
func startTimer() {
if timer == nil {
timer = NSTimer(timeInterval: 2.0, target: self, selector: #selector(nextImage), userInfo: nil, repeats: true)
NSRunLoop.currentRunLoop().addTimer(timer!, forMode: NSRunLoopCommonModes)
}
}
func nextImage() {
scrollView?.setContentOffset(CGPointMake(2*(scrollView?.bounds.width)!, 0), animated: true)
}
func stopTimer() {
timer?.invalidate()
timer = nil
}
func imgViewDidClicked(ges:UITapGestureRecognizer) {
let view = ges.view
print(view?.tag)
}
}
extension XGHomeHeadView: UIScrollViewDelegate {
func scrollViewDidScroll(scrollView: UIScrollView) {
var page = 0
var minDistance: CGFloat = CGFloat(MAXFLOAT)
for imgView in scrollView.subviews {
var distance: CGFloat = 0
distance = (imgView.frame.origin.x-scrollView.contentOffset.x)
distance = CGFloat(abs(Int(distance)))
if distance < minDistance {
minDistance = distance
page = imgView.tag
}
}
pageControl?.currentPage = page
}
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
updateContent()
}
func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView) {
updateContent()
}
func scrollViewWillBeginDragging(scrollView: UIScrollView) {
stopTimer()
}
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
startTimer()
}
}
swift轮播图
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- swift 轮播图无限滚动 控件的封装 这篇文章主要记录自己是怎么一步一步封装一个 轮播图, 记录了整个过程和遇到...
- 目标 :UIScrollView+三UIImageView的轮播图实现 原理:利用UIScrollView实现轮播...