码迷,mamicode.com
首页 > 其他好文 > 详细

无限滚动

时间:2014-07-30 20:26:14      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   os   strong   io   

LWTViewController.m

bubuko.com,布布扣
//
//  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
View Code

 

无限滚动,布布扣,bubuko.com

无限滚动

标签:des   style   blog   http   color   os   strong   io   

原文地址:http://www.cnblogs.com/wentianblog/p/3878756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!