標籤:ios
下載連接:github不斷更新地址:https://github.com/gsdios/SDCycleScrollViewgit
使用原理:採用UICollectionView的重用機制和循環滾動的方式實現圖片的無限輪播,播放很是順暢,解決了UISCrollView使用時從最後一張跳到第一張時的生硬狀態。github
主要類截圖:數組
SDCollectionViewCell:用來重用的item,即顯示圖片的視圖;緩存
SDCycleScrollView: 對外提供的一個建立輪播器的接口類,使用者就是直接使用這個類來實現圖片輪播的;網絡
:這幾個類主要是用來處理分頁節點的,能夠使用默認的原點分頁節點,也能夠使用圖片節點;ide
TAPageControl:顧名思義,可知這個是用來設置分頁的;工具
:一個簡化使用視圖frame結構體及其結構體中屬性的視圖分類。 oop
#import <UIKit/UIKit.h> typedef enum { SDCycleScrollViewPageContolAlimentRight, SDCycleScrollViewPageContolAlimentCenter } SDCycleScrollViewPageContolAliment; typedef enum { SDCycleScrollViewPageContolStyleClassic, // 系統自帶經典樣式 SDCycleScrollViewPageContolStyleAnimated, // 動畫效果pagecontrol SDCycleScrollViewPageContolStyleNone // 不顯示pagecontrol } SDCycleScrollViewPageContolStyle; @class SDCycleScrollView; @protocol SDCycleScrollViewDelegate <NSObject> @optional /** 點擊圖片回調 */ - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index; /** 圖片滾動回調 */ - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index; @end @interface SDCycleScrollView : UIView // >>>>>>>>>>>>>>>>>>>>>>>>>> 數據源接口 /** 本地圖片數組 */ @property (nonatomic, strong) NSArray *localizationImageNamesGroup; /** 網絡圖片 url string 數組 */ @property (nonatomic, strong) NSArray *imageURLStringsGroup; /** 每張圖片對應要顯示的文字數組 */ @property (nonatomic, strong) NSArray *titlesGroup; // >>>>>>>>>>>>>>>>>>>>>>>>> 滾動控制接口 /** 自動滾動間隔時間,默認2s */ @property (nonatomic, assign) CGFloat autoScrollTimeInterval; /** 是否無限循環,默認Yes */ @property(nonatomic,assign) BOOL infiniteLoop; /** 是否自動滾動,默認Yes */ @property(nonatomic,assign) BOOL autoScroll; @property (nonatomic, weak) id<SDCycleScrollViewDelegate> delegate; /** block監聽點擊方式 */ @property (nonatomic, copy) void (^clickItemOperationBlock)(NSInteger currentIndex); // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 自定義樣式接口 /** 輪播圖片的ContentMode,默認爲 UIViewContentModeScaleToFill */ @property (nonatomic, assign) UIViewContentMode bannerImageViewContentMode; /** 佔位圖,用於網絡未加載到圖片時 */ @property (nonatomic, strong) UIImage *placeholderImage; /** 是否顯示分頁控件 */ @property (nonatomic, assign) BOOL showPageControl; /** 是否在只有一張圖時隱藏pagecontrol,默認爲YES */ @property(nonatomic) BOOL hidesForSinglePage; /** pagecontrol 樣式,默認爲動畫樣式 */ @property (nonatomic, assign) SDCycleScrollViewPageContolStyle pageControlStyle; /** 分頁控件位置 */ @property (nonatomic, assign) SDCycleScrollViewPageContolAliment pageControlAliment; /** 分頁控件小圓標大小 */ @property (nonatomic, assign) CGSize pageControlDotSize; /** 當前分頁控件小圓標顏色 */ @property (nonatomic, strong) UIColor *currentPageDotColor; /** 其餘分頁控件小圓標顏色 */ @property (nonatomic, strong) UIColor *pageDotColor; /** 當前分頁控件小圓標圖片 */ @property (nonatomic, strong) UIImage *currentPageDotImage; /** 其餘分頁控件小圓標圖片 */ @property (nonatomic, strong) UIImage *pageDotImage; /** 輪播文字label字體顏色 */ @property (nonatomic, strong) UIColor *titleLabelTextColor; /** 輪播文字label字體大小 */ @property (nonatomic, strong) UIFont *titleLabelTextFont; /** 輪播文字label背景顏色 */ @property (nonatomic, strong) UIColor *titleLabelBackgroundColor; /** 輪播文字label高度 */ @property (nonatomic, assign) CGFloat titleLabelHeight; /** 初始輪播圖(推薦使用) */ + (instancetype)cycleScrollViewWithFrame:(CGRect)frame delegate:(id<SDCycleScrollViewDelegate>)delegate placeholderImage:(UIImage *)placeholderImage; + (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageURLStringsGroup:(NSArray *)imageURLStringsGroup; /** 本地圖片輪播初始化方式 */ + (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageNamesGroup:(NSArray *)imageNamesGroup; // >>>>>>>>>>>>>>>>>>>>>>>>> 清除緩存接口 /** 清除圖片緩存(這次升級後統一使用SDWebImage管理圖片加載和緩存) */ + (void)clearImagesCache; /** 清除圖片緩存(兼容舊版本方法) */ - (void)clearCache; @end
#import <SDCycleScrollView.h> // 我採用的是CopcoaPods管理工具導入的第三方庫,因此使用<>導入頭文件名 @interface ViewController ()<SDCycleScrollViewDelegate> @property (strong,nonatomic)NSArray *localImages;//本地圖片 @property (strong,nonatomic)NSArray *netImages; //網絡圖片 @property (strong,nonatomic)SDCycleScrollView *cycleScrollView;//輪播器 @end
2.懶加載本地圖片和網絡圖片性能
/** * 懶加載本地圖片數據 */ -(NSArray *)localImages{ if (!_localImages) { _localImages = @[@"1.png",@"2.png",@"3.png",@"4.png"]; } return _localImages; } /** * 懶加載網絡圖片數據 */ -(NSArray *)netImages{ if (!_netImages) { _netImages = @[ @"http://d.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40f507b2e99aa64034f78f01930.jpg", @"http://b.hiphotos.baidu.com/zhidao/pic/item/4b90f603738da9770889666fb151f8198718e3d4.jpg", @"http://g.hiphotos.baidu.com/zhidao/pic/item/f2deb48f8c5494ee4e84ef5d2cf5e0fe98257ed4.jpg", @"http://d.hiphotos.baidu.com/zhidao/pic/item/9922720e0cf3d7ca104edf32f31fbe096b63a93e.jpg" ]; } return _netImages; }
3-1.封裝方法,輪播本地圖片
/** * 輪播本地圖片 */ -(void)ScrollLocalImages{ /** 測試本地圖片數據*/ CGRect rect = CGRectMake(0,150, self.view.bounds.size.width, 400); self.cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:rect imageNamesGroup:self.localImages]; //設置圖片視圖顯示類型 self.cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleToFill; //設置輪播視圖的分頁控件的顯示 self.cycleScrollView.showPageControl = YES; //設置輪播視圖分也控件的位置 self.cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentCenter; //當前分頁控件小圓標顏色 self.cycleScrollView.currentPageDotColor = [UIColor redColor]; //其餘分頁控件小圓標顏色 self.cycleScrollView.pageDotColor = [UIColor purpleColor]; [self.view addSubview:self.cycleScrollView]; }
3-2.封裝方法,輪播網絡圖片
/** * 輪播網絡圖片 */ -(void)ScrollNetWorkImages{ /** 測試本地圖片數據*/ CGRect rect = CGRectMake(0,150, self.view.bounds.size.width, 400); self.cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:rect delegate:self placeholderImage:[UIImage imageNamed:@"PlacehoderImage.png"]]; //設置網絡圖片數組 self.cycleScrollView.imageURLStringsGroup = self.netImages; //設置圖片視圖顯示類型 self.cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleToFill; //設置輪播視圖的分頁控件的顯示 self.cycleScrollView.showPageControl = YES; //設置輪播視圖分也控件的位置 self.cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentCenter; //當前分頁控件小圓標圖片 self.cycleScrollView.pageDotImage = [UIImage imageNamed:@"pageCon.png"]; //其餘分頁控件小圓標圖片 self.cycleScrollView.currentPageDotImage = [UIImage imageNamed:@"pageConSel.png"]; [self.view addSubview:self.cycleScrollView]; } #pragma mark - 代理方法 /** 點擊圖片回調 */ - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index{ //NSLog(@"%ld",index); } /** 圖片滾動回調 */ - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index{ //NSLog(@"%ld",index); }
測試1:
- (void)viewDidLoad { [super viewDidLoad]; [self ScrollLocalImages]; }
- (void)viewDidLoad { [super viewDidLoad]; [self ScrollNetWorkImages]; }