此文描繪了BLCycleImageView的相關引見,詳細實例請看下文
圖片輪播器是一個在使用中運用率十分高的控件,翻了一遍手機上的app,發現簡直一切的使用中都不乏圖片輪播的身影。醒目、美觀、信息直面撲來等等特點使得輪播器成了app展現信息的首選。
其真實github上搜一下可以找到一些優秀的第三方庫,比方star較高的 SDCycleScrollView。抱著學習的態度,沒有去檢查它的源代碼,想著自己要是完成一個該怎樣做呢?立馬入手撸一個,才有了自己的輪播器BLCycleImageView。上面講大約講一下在撸的整個進程中思緒和播種,希望對各位看官有所協助(特別是像我一樣剛入門但愛折騰的小白)。
一、後期考慮預備封裝一個控件前先需求搞明白這幾個問題:
這個控件無能啥,大約長什麼樣子? 它需求內部哪些信息? 它向外反應什麼信息? 選型;運用何種技術完成,在這裡就是以什麼為父類?輪播器長啥樣?
隨意翻開幾個常用的使用看看就知道了(iphone上的App Store首頁就有);功用無非是顯示若干圖片、顯示以後圖片是第幾張(pagecontroll)、可以左右滑動、可以自動輪播、顯示圖片描繪以及圖片緩存等等。
輪播器要知道哪些信息呢?
輪播普通是放置相似廣告之類的信息,每個時間段投放的廣告會不一樣,這樣就需求接納內部給我的一組圖片地址
@property(nonatomic,copy) NSArray *imageUrlArr;
那麼異步加載這些圖片時,難免會碰到網絡蹩腳的時分,那麼這個時分需求一個顯示默許的圖片。(圖片緩存采用第三方庫SDWebImage)
@property(nonatomic,strong) UIImage *placeholderImg;
下面是一個輪播器最根本必需的信息,有了這些信息,輪播器就可以任務了。
但為了更好的擴展性和定制性,我們還有需求知道很多信息,比方:每張圖片需求一個冗長的“廣告語”、能否顯示pagecontroll、能否自動輪播、自動輪播距離時間等等。不逐個羅列,詳細看上面代碼:
@property(nonatomic,copy) NSArray *imageTitles;//圖片描繪
@property(nonatomic,getter=isShowPageControll) BOOL showPageControll;
@property(nonatomic,getter=isAutoMoving) BOOL autoMoving;//能否自動輪播
@property(nonatomic,assign) NSNumber *autoMoveInterval;//輪播距離時間
@property(nonatomic,assign) PageControllPositionType pagecontrollPosition;//圖片描繪地位
暫時只想到這麼多了,這樣它就有很好的定制性了,以能滿足不同的需求。
輪播器反應哪些信息呢?
當你看到輪播器中一個著裝很暴露的美麗妹子,你能否想點擊一下等待看一下大圖呢,然後縮小,再縮小,再縮小點呢?哈哈暴露了自己的想法,次要是審美……。 那麼就需求呼應用戶的點擊圖片的事情:
@protocol CycleImageViewDelegate <NSObject>
@optional
- (void)cycleImageView:(BLCycleImageView *)cycleImageView didClickImage:(NSUInteger)imageIndex;
@end
到這裡一個功用較為完善的輪播器就根本構建起來了,結上去的就是要思索怎樣去完成了。那麼就馬上入手編碼?先等等。
用什麼來輪播器呢?
思索一下IOS的那些根底控件能完成輪播器呢?很自然的就想到三個:
UIPageViewController UICollectionView UIScrollView其實無論用哪種方式完成都是可以,但團體覺得後兩種更適宜封裝成獨立的控件,理由很復雜,試想將一個controller添加到另外一個controller(subviewcontroller)不是不可以,總覺得怪怪的。至於是用UICollenctionView還是UIScrollView就看各位自己熟習哪個了。這裡BLCycleImageView選擇用UIScrollView來完成。
還有一個問題,怎樣完成有限輪播呢?罕見有兩種做法:
1、N+2的方式;完成原理是當需求輪播N張圖片,我們在首尾再加兩張圖片,在首部加一張圖片為第N張,尾部加一張圖片為第1張圖片。覺得有點亂?……【BLCycleImageView】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!