iOS 用UICollectionView來實(shí)現(xiàn)自動輪播

  • 使用場景:自定義tableView的headerView禁舷,headerView實(shí)現(xiàn)了自動輪播

屬性和遵守的協(xié)議

[@interface](https://my.oschina.net/u/996807) CustomHeaderView ()<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>

[@property](https://my.oschina.net/property) (nonatomic, weak) UICollectionView *collectionView;

[@property](https://my.oschina.net/property) (nonatomic, strong) UIPageControl *pageControl;

[@property](https://my.oschina.net/property) (nonatomic, strong) NSTimer *timer;

[@end](https://my.oschina.net/u/567204)

cell的標(biāo)識

static NSString *const CustomHeaderViewCellId = @"CustomHeaderViewCellId";

控制器的初始化

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // 設(shè)置UI
        [self setupUI];
        // 開啟定時(shí)器
        [self addLCTimer];
    }
    return self;
}

設(shè)置UI(高度180,五個(gè)item)

- (void)setupUI{
    self.backgroundColor = [UIColor whiteColor];
    
    // 創(chuàng)建collectionView
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
    flowLayout.itemSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 180);
    flowLayout.minimumInteritemSpacing = 0;
    flowLayout.minimumLineSpacing = 0;
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    
    UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 180) collectionViewLayout:flowLayout];
    collectionView.backgroundColor = [UIColor whiteColor];
    collectionView.delegate = self;
    collectionView.dataSource = self;
    collectionView.pagingEnabled = YES;
    collectionView.showsVerticalScrollIndicator = NO;
    collectionView.showsHorizontalScrollIndicator = NO;
    collectionView.bounces = NO;
    collectionView.contentSize = CGSizeMake(5 * collectionView.bounds.size.width, 0);
    [self addSubview:collectionView];
    self.collectionView = collectionView;
    
    // 注冊cell
    [collectionView registerNib:[UINib nibWithNibName:@"CustomHeaderViewCell" bundle:nil] forCellWithReuseIdentifier:CustomHeaderViewCellId];
    
    // pageControl
    UIPageControl *pageControl = [[UIPageControl alloc]init];
    pageControl.numberOfPages = 5;
    CGSize size = [pageControl sizeForNumberOfPages:5];
    pageControl.bounds = CGRectMake(0, 0, size.width, size.height);
    pageControl.center = CGPointMake(self.center.x, 130);
    [self addSubview:pageControl];
    self.pageControl = pageControl;
    
    self.pageControl.currentPage = 0;
}

數(shù)據(jù)源方法<UICollectionViewDataSource>

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 5;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    CustomHeaderViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CustomHeaderViewCellId forIndexPath:indexPath];
    cell.model = self.modelsArray[indexPath.row];
    return cell;
}

代理方法<UICollectionViewDelegateFlowLatout>

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    [self removeLCTimer];
}

/** 當(dāng)用戶停止的時(shí)候調(diào)用 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    [self addLCTimer];
}

/** 設(shè)置頁碼 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5) % 5;
    self.pageControl.currentPage = page;
}

添加定時(shí)器和刪除定時(shí)器

- (void)addLCTimer{
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    self.timer = timer;
}

- (void)removeLCTimer{
    [self.timer invalidate];
    self.timer = nil;
}

nextPage(主要的算法)

- (void)nextPage {
    NSIndexPath *currentIndexPath = [[self.collectionView indexPathsForVisibleItems] lastObject];
    
    NSIndexPath *currentIndexPathReset = [NSIndexPath indexPathForItem:currentIndexPath.item inSection:0];
    [self.collectionView scrollToItemAtIndexPath:currentIndexPathReset atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];
    
    NSInteger nextItem = currentIndexPathReset.item + 1;
    if (nextItem == 5) {
        nextItem = 0;
    }
    NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:nextItem inSection:0];
    
    [self.collectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}

設(shè)置數(shù)據(jù)源

- (void)setModelsArray:(NSArray<LCNewsModel *> *)modelsArray{
    _modelsArray = modelsArray;
}

完成以上方法就能實(shí)現(xiàn)一個(gè)用UICollectionView做的輪播系統(tǒng),點(diǎn)擊跳轉(zhuǎn)的時(shí)間自己實(shí)現(xiàn)就可以了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婉烟,一起剝皮案震驚了整個(gè)濱河市砌些,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朵耕,老刑警劉巖炫隶,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阎曹,居然都是意外死亡伪阶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門处嫌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅贴,“玉大人,你說我怎么就攤上這事熏迹¢苁恚” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵注暗,是天一觀的道長坛缕。 經(jīng)常有香客問我,道長捆昏,這世上最難降的妖魔是什么回俐? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任藤肢,我火速辦了婚禮脯宿,結(jié)果婚禮上亩进,老公的妹妹穿的比我還像新娘搀军。我一直安慰自己,他們只是感情好勇皇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布罩句。 她就那樣靜靜地躺著,像睡著了一般敛摘。 火紅的嫁衣襯著肌膚如雪门烂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天兄淫,我揣著相機(jī)與錄音屯远,去河邊找鬼。 笑死捕虽,一個(gè)胖子當(dāng)著我的面吹牛慨丐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泄私,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼房揭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晌端?” 一聲冷哼從身側(cè)響起捅暴,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咧纠,沒想到半個(gè)月后蓬痒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漆羔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年梧奢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片演痒。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粹断,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫡霞,到底是詐尸還是另有隱情,我是刑警寧澤希柿,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布诊沪,位于F島的核電站,受9級特大地震影響曾撤,放射性物質(zhì)發(fā)生泄漏端姚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一挤悉、第九天 我趴在偏房一處隱蔽的房頂上張望渐裸。 院中可真熱鬧,春花似錦、人聲如沸昏鹃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洞渤。三九已至阅嘶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間载迄,已是汗流浹背讯柔。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留护昧,地道東北人魂迄。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像惋耙,于是被迫代替她去往敵國和親捣炬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

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