首页 > 代码库 > 无限滚动
无限滚动
LWTViewController.m
//// LWTViewController.m// 无限滚动//// Created by apple on 14-7-30.// Copyright (c) 2014年 lwt. All rights reserved.//#import "LWTViewController.h"#import "LWTNews.h"#import "MJExtension.h"#import "LWTNewsCell.h"#define LWTCellIdentifier @"news"#define LWTMaxSection 100@interface LWTViewController () <UICollectionViewDataSource, UICollectionViewDelegate>@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;@property (nonatomic, strong) NSArray *newses;@property (nonatomic, weak) IBOutlet UIPageControl *pageContol;@property (nonatomic, strong) NSTimer *timer;@end@implementation LWTViewController-(NSArray *)newses{ if (_newses == nil) { _newses = [LWTNews objectArrayWithFilename:@"newses.plist"]; self.pageContol.numberOfPages = self.newses.count; } return _newses;}- (void)viewDidLoad{ [super viewDidLoad]; // 注册cell [self.collectionView registerNib:[UINib nibWithNibName:@"LWTNewsCell" bundle:nil] forCellWithReuseIdentifier:LWTCellIdentifier]; // 默认显示最中间的那组 [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:LWTMaxSection / 2] atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; // 添加定时器 [self addTimer]; }/** * 添加定时器 */- (void)addTimer{ 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)stopTimer{ [self.timer invalidate]; self.timer = nil;}- (NSIndexPath *)resetIndexPath{ // 当前正在展示的位置 NSIndexPath *currentIndexPath = [[self.collectionView indexPathsForVisibleItems] lastObject]; // 马上显示回最中间那组的数据 NSIndexPath *currentIndexPathReset = [NSIndexPath indexPathForItem:currentIndexPath.item inSection:LWTMaxSection / 2]; [self.collectionView scrollToItemAtIndexPath:currentIndexPathReset atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; return currentIndexPathReset;}/** * 下一页 */- (void)nextPage{ // 1.马上显示回最中间那组的数据 NSIndexPath *indexPath = [self resetIndexPath]; // 2.计算出下一个需要展示的位置 NSInteger nextItem = indexPath.item + 1; NSInteger nextSection = indexPath.section; if (nextItem >= self.newses.count) { nextItem = 0; nextSection++; } // 3.通过动画滚动到下一个位置 [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:nextItem inSection:nextSection] atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];}#pragma mark - UICollectionViewDataSource- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ return LWTMaxSection;}- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ return self.newses.count;}- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ LWTNewsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:LWTCellIdentifier forIndexPath:indexPath]; cell.news = self.newses[indexPath.item]; return cell;}#pragma mark - UICollectionViewDelegate/** * 当用户即将开始拖拽的时候就调用 */- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ [self stopTimer];}- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ int page = (int)(scrollView.contentOffset.x / scrollView.bounds.size.width + 0.5) % self.newses.count; self.pageContol.currentPage = page;}/** * 当用户停止拖拽的时候就调用 */- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ [self addTimer];}@end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。