iOS之旅--用CollectionView實現輪播圖效果+封裝方法

用CollectionView實現輪播圖效果

思路:使用Section來實現,每一組的數據都一樣,默認設置N組(正常情況下50-100即可,除非有人很無聊),然後添加定時器,使CollectionView滾動到相應的地方,手動拖拽是collectionView本身就具備的。

https://github.com/shijinliang/KSDemo/tree/CollectionView輪播圖
https://github.com/shijinliang/KSDemo裏面的 一個分支,之後會合併到主分支,所以clone下來的master上會有一個文件夾“CollectionView輪播圖”
【歡迎star】

封裝方法:

typedef void(^selectImageBlock)(NSInteger index);

@interface CollectionImageView : UIView
/**
 *  封裝collectionView實現輪播圖
 *
 *  @param frame      傳入輪播圖的frame
 *  @param imageArray 圖集數組表示
 *  @param block      點擊圖片的方法用block公開出去
 *
 *  @return
 */
- (instancetype)initWithFrame:(CGRect)frame imageArray:(NSArray *)imageArray selectImageBlock:(selectImageBlock) block;

集成“CollectionView封裝”文件夾的代碼,調用如下代碼即可實現效果:

NSArray *images = @[@"icc1",@"icc2",@"icc3",@"icc4",@"icc5"];
CollectionImageView *view =
 [[CollectionImageView alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 300) 
 imageArray:images 
 selectImageBlock:^(NSInteger index) {
        NSLog(@"點擊的是第%d個",index);
    }];
[self.view addSubview:view];

小注:關於上面說的設置N組,在定時器狀態下,有一個優化,可以使其在計算下一頁的時候,先重算位置,無動畫滾動到中間的那組。然後再滾動到下一頁,這樣collectionView只要2組就足夠,但是拖拽的時候出問題了,會出現拖拽到屏幕外時可能返回當前頁,未移動到目標頁面。
主要因爲 NSIndexPath *currentPath = [[self.collectionView indexPathsForVisibleItems] lastObject]; 這部分代碼導致,
[self.collectionView indexPathsForVisibleItems] 此方法返回一個數組,有的時候返回一個NSIndexPath,有的時候返回的是兩個,當返回兩個的時候,手動拖拽可能會出現:
我打印的是數組裏面NSIndexPath的row,【1,2】 【2,1】,可能會出現這兩種結果,所以拖拽的時候沒有使用重算位置這個方法。

哪位童鞋有好的辦法歡迎指導

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章