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()
}
}
网友评论