swift首頁(yè)輪播 輕量級(jí) 易集成

sscycle.gif
輪播終結(jié)者,用swift完成,易于集成使用,下載圖片使用了SDWebImage
自己動(dòng)手用swift寫(xiě)了一個(gè),歡迎試用!github代碼地址
網(wǎng)上找了一些首頁(yè)輪播,寫(xiě)的或多或少有一些問(wèn)題,用著不舒服,自己用swift寫(xiě)了一個(gè)輪播控件,有如下特點(diǎn):
- 下載圖片使用了SDWebImage,性能高
- 輪播圖上需要點(diǎn)擊鏈接,只需要調(diào)用一個(gè)block便可加上點(diǎn)擊,易于集成
- 支持webp格式圖片
使用方法
在Podfile加入以下:
use_frameworks!
pod 'SSCycleScrollView'
這個(gè)庫(kù)中支持了webp格式圖片,引入了SDWebImage庫(kù)。
下面可參考Demo中:
初始化時(shí),傳一個(gè)url的array,可以傳本地的圖片名字,也可以傳網(wǎng)絡(luò)圖片;
初始化一個(gè)SSCycleScrollView:
self.mainScrollView = SSCycleScrollView.init(frame: currentRect, animationDuration: 3, inputImageUrls: self.scrollImageUrls)
self.mainScrollView?.tapBlock = {index in
print("tapped page\(index)")
}
原理SSCycleScrollView
初始化后會(huì)啟動(dòng)一個(gè)定時(shí)器,repeat調(diào)用一個(gè)timerFired方法,方法中每次對(duì)scrollview加一個(gè)自己寬度的offset:
func timerFired() {
let xOffset = Int(self.contentOffset.x/kScreenWidth)
let xOffsetFloat = CGFloat(xOffset) * kScreenWidth
let newOffset = CGPointMake(xOffsetFloat + CGRectGetWidth(self.frame), self.contentOffset.y)
self.setContentOffset(newOffset, animated: true)
}
沒(méi)有直接加xOffset, 而是對(duì)其做了一個(gè)換算,確保每次加的offset是自己寬度的整數(shù)倍。
在scrollViewDidScroll方法,每次計(jì)算前一個(gè),當(dāng)前,后一個(gè)index,確保index范圍為index >= 0 && index < allImageArray.count, 每次滾動(dòng)后都會(huì)三個(gè)imageView中的image做重新賦值:
self.previousDisplayView?.image = self.allImageArray[previousArrayIndex]
self.currentDisplayView?.image = self.allImageArray[self.currentArrayIndex]
self.lastDisplayView?.image = self.allImageArray[lastArrayIndex]
self.contentOffset = CGPointMake(CGRectGetWidth(self.frame), 0)
上面最后一行設(shè)置contenOffset非常重要,每次把scrollView的位置重置為1個(gè)自身寬度的offset。
小結(jié)
如果你覺(jué)得有不好的地方,可以提出來(lái),大家一塊研究一下,歡迎常來(lái)我的倉(cāng)庫(kù),別忘記給個(gè)star!
微信公眾號(hào)

開(kāi)發(fā)者思維 devthinking
QQ交流群:295976280

iOS交流群(一)群二維碼.png