美文网首页
swift轮播图

swift轮播图

作者: koktear | 来源:发表于2016-07-26 15:49 被阅读31次
    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轮播图

          本文链接:https://www.haomeiwen.com/subject/nzinjttx.html