swift首頁輪播 輕量級 易集成
sscycle.gif
輪播終結者,用swift完成,易于集成使用,下載圖片使用了SDWebImage
自己動手用swift寫了一個,歡迎試用!github代碼地址
網上找了一些首頁輪播,寫的或多或少有一些問題,用著不舒服,自己用swift寫了一個輪播控件,有如下特點:
- 下載圖片使用了SDWebImage,性能高
- 輪播圖上需要點擊鏈接,只需要調用一個block便可加上點擊,易于集成
- 支持webp格式圖片
使用方法
在Podfile加入以下:
use_frameworks!
pod 'SSCycleScrollView'
這個庫中支持了webp格式圖片,引入了SDWebImage庫。
下面可參考Demo中:
初始化時,傳一個url的array,可以傳本地的圖片名字,也可以傳網絡圖片;
初始化一個SSCycleScrollView:
self.mainScrollView = SSCycleScrollView.init(frame: currentRect, animationDuration: 3, inputImageUrls: self.scrollImageUrls)
self.mainScrollView?.tapBlock = {index in
print("tapped page\(index)")
}
原理SSCycleScrollView
初始化后會啟動一個定時器,repeat調用一個timerFired方法,方法中每次對scrollview加一個自己寬度的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)
}
沒有直接加xOffset, 而是對其做了一個換算,確保每次加的offset是自己寬度的整數倍。
在scrollViewDidScroll方法,每次計算前一個,當前,后一個index,確保index范圍為index >= 0 && index < allImageArray.count, 每次滾動后都會三個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)
上面最后一行設置contenOffset非常重要,每次把scrollView的位置重置為1個自身寬度的offset。
小結
如果你覺得有不好的地方,可以提出來,大家一塊研究一下,歡迎常來我的倉庫,別忘記給個star!
微信公眾號
開發者思維 devthinking
QQ交流群:295976280
iOS交流群(一)群二維碼.png