swift實(shí)現(xiàn)自動(dòng)輪播圖效果(UIScrollView+UIPageControl+Timer)
本文實(shí)例為大家分享了swift實(shí)現(xiàn)自動(dòng)輪播圖效果的具體代碼,供大家參考,具體內(nèi)容如下
比較簡(jiǎn)單,原理就不說(shuō)了,這里只做記錄:
代碼如下:
1、準(zhǔn)備
var pageControl:UIPageControl? var myscrollView:UIScrollView? var myTimer:Timer? var mycurrentPage:NSInteger? var courses = [ ["name":"first","pic":"1.jpeg"], ["name":"second","pic":"2.jpeg"], ["name":"third","pic":"3.jpeg"] ]
2、內(nèi)容的添加
//添加scrollview self.addScrollView() //添加圖片 self.addImages() //添加pagecontrol self.addPageControl() mycurrentPage = 1 //添加定時(shí)器 self.setupTimer()
具體方法:
func addScrollView(){ self.myscrollView = UIScrollView() self.myscrollView?.frame = CGRect(x:0,y:0,width:kScreenWidth,height:kScreenHeight/2) self.myscrollView?.contentSize = CGSize(width:kScreenWidth*3,height:kScreenHeight/2) self.myscrollView?.showsHorizontalScrollIndicator = false self.myscrollView?.showsVerticalScrollIndicator = false self.myscrollView?.scrollsToTop = false self.myscrollView?.delegate = self self.myscrollView?.isPagingEnabled = true self.view.addSubview(self.myscrollView!) } func addImages(){ let size = self.myscrollView?.bounds.size for (seq,course) in courses.enumerated() { let page = UIView(frame:CGRect(x:0,y:64,width:kScreenWidth,height:kScreenHeight/2)) let imageView=UIImageView(image:UIImage(named:course["pic"]!)) imageView.frame = page.frame page.addSubview(imageView) page.backgroundColor = UIColor.gray let lab1 = UILabel(frame:CGRect(x:15,y:kScreenHeight/2-100,width:kScreenWidth-30,height:40)) lab1.textAlignment = .center lab1.backgroundColor = UIColor.red lab1.text = course["name"] page.addSubview(lab1) page.frame = CGRect(x:CGFloat(seq)*(size?.width)!,y:0,width:(size?.width)!,height:(size?.height)!) self.myscrollView?.addSubview(page) } } func addPageControl(){ self.pageControl = UIPageControl(frame:CGRect(x:kScreenWidth/2-50/2,y:kScreenHeight/2-40,width:50,height:35)) self.pageControl?.backgroundColor = UIColor.blue self.pageControl?.numberOfPages = courses.count self.view.addSubview(self.pageControl!) } func setupTimer() { self.myTimer = Timer.init(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true) RunLoop.main.add(self.myTimer!, forMode: RunLoopMode.defaultRunLoopMode) // DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) { // self.myTimer?.fire() // } } func closeTimer(){ self.myTimer?.invalidate() self.myTimer = nil } func timerAction(){ self.pageControl?.currentPage += mycurrentPage! if self.pageControl?.currentPage == 0 || self.pageControl?.currentPage == 2 { mycurrentPage = -mycurrentPage! } self.myscrollView?.contentOffset = CGPoint(x:CGFloat(kScreenWidth)*CGFloat((pageControl?.currentPage)!),y:0) }
3、一些代理方法的實(shí)現(xiàn),手動(dòng)拖動(dòng)的時(shí)候,銷(xiāo)毀定時(shí)器,節(jié)省內(nèi)存
internal func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let page = Int(scrollView.contentOffset.x/scrollView.frame.size.width) self.pageControl?.currentPage = page } func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { self.closeTimer() } func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { self.setupTimer() } func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) { self.pageControl?.currentPage = Int(scrollView.contentOffset.x/kScreenWidth) }
效果如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Swift中的數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換
Swift中的類(lèi)型轉(zhuǎn)換可以結(jié)合類(lèi)的繼承等面向?qū)ο蟮木幊烫匦詠?lái)進(jìn)行,本文中我們就來(lái)詳解Swift中的數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換,需要的朋友可以參考下2016-07-07Swift流程控制之循環(huán)語(yǔ)句和判斷語(yǔ)句詳解
這篇文章主要介紹了Swift流程控制之循環(huán)語(yǔ)句和判斷語(yǔ)句詳解,文中還使用了一個(gè)游戲例子來(lái)講解循環(huán)語(yǔ)句和判斷語(yǔ)句的使用,需要的朋友可以參考下2014-07-07Swift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解
這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類(lèi)型和基本語(yǔ)法,例如常量和變量、注釋、分號(hào)、整數(shù)、數(shù)值類(lèi)型轉(zhuǎn)換等內(nèi)容,需要的朋友可以參考下2015-01-01Swift中優(yōu)雅處理閉包導(dǎo)致的循環(huán)引用詳解
這篇文章主要給大家介紹了關(guān)于Swift中優(yōu)雅的處理閉包導(dǎo)致的循環(huán)引用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08