三十行核心代碼封裝自己的輪播圖

實際開發(fā)中我們可以使用第三方實現(xiàn)無限輪播頭,但是一般都會有很多冗余的代碼。有時輪播圖中還可能對樣式要其他要求,索性步入封裝一個自己的無限輪播圖。下面介紹一下基于UICollectionView封裝的一個實用的輪播圖。源代碼鏈接:https://github.com/ZhengYaWei1992/ZWCycleView

效果圖

直接看如下的三十行核心代碼即可。cycleModels中放置的是輪播圖相關(guān)的圖像和文字信息。這里要注意在collectionView開始拖動的時候,銷毀定時器,在結(jié)束拖動的時候要創(chuàng)建定時器。不能通過[NSDate distantFuture]和[NSDate distancePast]控制定時器的開關(guān),應該是銷毀和創(chuàng)建,否則會有Bug。

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    /*********無限輪播關(guān)鍵點1****************/
    return self.cycleModels.count * 10000;
}
- (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    ZWCycleCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ZWCycleCollectionCell" forIndexPath:indexPath];
     /*********無限輪播關(guān)鍵點2****************/
    //實際使用的時候用SDWebImage設(shè)置一下就可以
     cell.myImageView.image = [UIImage imageNamed:self.cycleModels[indexPath.row % self.cycleModels.count].imageUrl];
    cell.label.text =self.cycleModels[indexPath.row % self.cycleModels.count].des;
    return cell;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    // 1.獲取滾動的偏移量
    CGFloat offsetX = scrollView.contentOffset.x + scrollView.frame.size.width * 0.5;
    // 2.計算pageControl的currentIndex
    /*********無限輪播關(guān)鍵點3****************/
    self.pageControl.currentPage = (int)(offsetX/scrollView.frame.size.width) % (_cycleModels.count);
}
//開始拖動的時候銷毀定時器,結(jié)束拖動時開啟定時器。使用[NSDate distantFuture]和[NSDate distancePast]會有Bug
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    [self removeTimer];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    [self addTimer];
}
- (void)onTimer:(NSTimer *)timer{
    // 1.獲取滾動的偏移量
    CGFloat currentOffsetX = self.collectionView.contentOffset.x;
    CGFloat offsetX = currentOffsetX + self.collectionView.frame.size.width;
    // 2.滾動該位置
    [self.collectionView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
}
-(void)addTimer{
     _timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop]addTimer:_timer forMode:NSRunLoopCommonModes];
}
- (void)removeTimer{
    [_timer invalidate];
    _timer = nil;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,335評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • 步入30了,身邊有好多讓我?guī)兔榻B對象的同齡人,有的甚至比我大很多。一問他們有什么要求,他們的回答就是沒有要求啊。...
    一諾花開閱讀 669評論 7 2
  • 不是每個戀曲都有美好回憶。 突然想起這句歌詞,然后去搜了這首歌來聽,原來這首歌是林志穎唱的。點擊歌名,開始播放,才...
    蘭思閱讀 810評論 0 1
  • 感恩今日早起站樁,為了健康的作息習慣,為了像海綿一樣擠出時間,明日繼續(xù),哈哈哈哈哈哈哈哈~ 感恩早起給家人做飯炒菜...
    黎家小蔓閱讀 226評論 0 0