swift輪播圖

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()
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市徐许,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菜循,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件童擎,死亡現(xiàn)場(chǎng)離奇詭異察蹲,居然都是意外死亡济锄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)餐抢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)现使,“玉大人,你說(shuō)我怎么就攤上這事旷痕√夹猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵欺抗,是天一觀的道長(zhǎng)售碳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绞呈,這世上最難降的妖魔是什么贸人? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮佃声,結(jié)果婚禮上艺智,老公的妹妹穿的比我還像新娘。我一直安慰自己圾亏,他們只是感情好十拣,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布封拧。 她就那樣靜靜地躺著,像睡著了一般夭问。 火紅的嫁衣襯著肌膚如雪泽西。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天缰趋,我揣著相機(jī)與錄音捧杉,去河邊找鬼。 笑死埠胖,一個(gè)胖子當(dāng)著我的面吹牛糠溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播直撤,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜕着!你這毒婦竟也來(lái)了谋竖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤承匣,失蹤者是張志新(化名)和其女友劉穎蓖乘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體韧骗,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘉抒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袍暴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片些侍。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖政模,靈堂內(nèi)的尸體忽然破棺而出岗宣,到底是詐尸還是另有隱情,我是刑警寧澤淋样,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布耗式,位于F島的核電站,受9級(jí)特大地震影響趁猴,放射性物質(zhì)發(fā)生泄漏刊咳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一儡司、第九天 我趴在偏房一處隱蔽的房頂上張望娱挨。 院中可真熱鬧,春花似錦枫慷、人聲如沸让蕾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)探孝。三九已至笋婿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顿颅,已是汗流浹背缸濒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粱腻,地道東北人庇配。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像绍些,于是被迫代替她去往敵國(guó)和親捞慌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • swift 輪播圖無(wú)限滾動(dòng) 控件的封裝 這篇文章主要記錄自己是怎么一步一步封裝一個(gè) 輪播圖, 記錄了整個(gè)過(guò)程和遇到...
    iOS_愛(ài)OS閱讀 6,262評(píng)論 0 6
  • 效果如上圖所示 調(diào)用方法: let scrollView = LXJSycleScrollView(frame: ...
    小俊一不小心閱讀 323評(píng)論 0 1
  • 隨著現(xiàn)代科技的發(fā)展柬批,界面干凈啸澡、整潔已經(jīng)是最基本的要求了,所以輪播圖就出現(xiàn)啦氮帐!現(xiàn)在就來(lái)看看輪播圖的代碼吧 首先需要定...
    Miss_差不多閱讀 503評(píng)論 0 0
  • 最近在學(xué)習(xí)swift嗅虏,就用swift實(shí)現(xiàn)輪播圖來(lái)練習(xí)一下 輪播圖的創(chuàng)建有兩種方式: 顯然使用collectionV...
    分享學(xué)習(xí)閱讀 1,321評(píng)論 0 3
  • 目標(biāo) :UIScrollView+三UIImageView的輪播圖實(shí)現(xiàn) 原理:利用UIScrollView實(shí)現(xiàn)輪播...
    俊瑤先森閱讀 1,102評(píng)論 0 0