App
中不可或缺的廣告輪播圖組件,如今開源出來了,但願對你們有幫助!使用過程當中有出現任何bug
,都會很快幫助解決!ios
用一個第三方庫,首先須要瞭解這個三方庫有什麼特性,爲何值得使用它!看看下面的說明緊!git
我相信每個想要本身寫這個無限滾動顯示廣告圖片的開發者,都會遇到這麼個問題:滾動到最後一張後,再切換到第一張時怎麼動畫效果這麼難看呢?根本就是到末尾後就直接切換到第一張,所以效果很不友好。github
HYBLoopScrollView
就很好地解決了這個問題。這個庫使用了UICollectionView
的特性,很巧妙地實現了這個無限滾動的效果。api
原來我也想使用別人的開源庫,可是使用起來很困難,一大堆的API
,維護起來太麻煩。所以,才決定本身寫一套庫來解決這個麻煩。緩存
這裏提供了惟一地建立控件的方法:app
+ (instancetype)loopScrollViewWithFrame:(CGRect)frame imageUrls:(NSArray *)imageUrls timeInterval:(NSTimeInterval)timeInterval didSelect:(HYBLoopScrollViewDidSelectItemBlock)didSelect didScroll:(HYBLoopScrollViewDidScrollBlock)didScroll;
看到連同didSelect
參數和didScroll
參數了嗎?前者就是點擊某個廣告圖片時的回調block
,然後者就是滾動到某個廣告時的回調,是否是很簡單?oop
另外,還封裝了定時器的api
,可方便地暫停或繼續開啓:動畫
/** * Pause the timer. Usually you need to pause the timer when the view disappear. */ - (void)pauseTimer; /** * Start the timer immediately. If you has pause the timer, you may need to start * the timer again when the view appear. */ - (void)startTimer;
HYBLoadImageView類是繼承於UIImageView,提供了下載圖片及緩存的功能,包括獲取緩存的大小、清空緩存、支持自動設置顯示成圓形頭像。atom
/** * @author 黃儀標 * * 此處公開此API,是方便你們能夠在別的地方使用。等比例剪裁圖片大小到指定的size * * @param image 剪裁前的圖片 * @param size 最終圖片大小 * @param isScaleToMax 是取最大比例仍是最小比例,YES表示取最大比例 * * @return 裁剪後的圖片 */ + (UIImage *)clipImage:(UIImage *)image toSize:(CGSize)size isScaleToMax:(BOOL)isScaleToMax;
若是但願將下載的圖片等比例縮放爲imageView的大小,則能夠設置爲YES:spa
/** * @author 黃儀標 * * 是否自動將下載到的圖片裁剪爲UIImageView的size。默認爲NO。 * 若設置爲YES,則在下載成功後只存儲裁剪後的image */ @property (nonatomic, assign) BOOL shouldAutoClipImageToViewSize;
對於一個連接,若是下載失敗了,下一次再請求時,能夠再去下載一次。默認爲重試2次,若是超過2次,則不會再去下載:
/** * @author 黃儀標 * * 指定URL下載圖片失敗時,重試的次數,默認爲2次 */ @property (nonatomic, assign) NSUInteger attemptToReloadTimesForFailedURL;
內部自帶了圖片下載功能及圖片緩存功能,而且在收到內存警告時,也會清理掉圖片緩存。
說到第三方庫,怎麼能少了對cocoapods
的支持呢?
當前維護的版本已經到了version 3.0.0
,可經過下面的方法添加到Podfile
中:
pod "HYBLoopScrollView", '~> 3.0.0'
前一版本是2.2.5,依賴着AFNetworking這個第三方庫,爲了讓本組件更加通用,在3.0.0版本去掉了第三方的依賴。並且在API上更加簡化了,去掉了一些沒必要要的API。使用起來更簡單,有多簡單,請看下面:
HYBLoopScrollView *loop = [HYBLoopScrollView loopScrollViewWithFrame:CGRectMake(0, 40, 320, 120) imageUrls:images timeInterval:5 didSelect:^(NSInteger atIndex) { } didScroll:^(NSInteger toIndex) { }]; loop.shouldAutoClipImageToViewSize = YES; loop.placeholder = [UIImage imageNamed:@"default.png"]; loop.alignment = kPageControlAlignRight; loop.adTitles = titles; [self.view addSubview:loop];
另外,3.0.0版本在點擊輪播圖和切換輪播圖時不會將圖片控制傳回來了。只是返回圖片位置。
有朋友說什麼內存得不到釋放的,請注意使用。看下面在block回調處,對Self是使用弱引用的,否則內存是得不到釋放的。這是基本的內存循環引用問題,請你們注意:
// 請使用weakSelf,否則內存得不到釋放 __weak __typeof(self) weakSelf = self; HYBLoopScrollView *loop = [HYBLoopScrollView loopScrollViewWithFrame:CGRectMake(0, 40, 320, 120) imageUrls:images timeInterval:5 didSelect:^(NSInteger atIndex) { [weakSelf dismissViewControllerAnimated:YES completion:NULL]; } didScroll:^(NSInteger toIndex) { }];
若是下載獲得的圖片的寬、高比與imageview的寬、高比不一樣,請不要設置下面的屬性,或者設置爲NO(默認就是NO):
loop.shouldAutoClipImageToViewSize = NO;
若是在調試過程當中,設置了YES,發現圖片未鋪滿整個imageview,就去掉上面設置的屬性,或者設置爲NO。而後記得調用清空緩存才能看到效果:
[loop clearImagesCache];
該開源庫至今已經獲得很多朋友的郵件反饋,纔有了今天的版本。感謝全部支持個人朋友!!!
若是不想使用cocoapods
來安裝,能夠到github下載源代碼,直接將HYBLoopScrollView
文件夾拖到工程,不須要作任何配置!!!
下載地址:HYBLoopScrollView
想了解更詳細如何去使用,請閱讀: