zoukankan      html  css  js  c++  java
  • 无限滚动

    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
    View Code
  • 相关阅读:
    【转】busybox分析——arp设置ARP缓存表中的mac地址
    【转】OpenWRT开发自定义应用方法
    10大白帽黑客专用的 Linux 操作系统
    原始套接字
    正则表达式
    如何解决虚拟机中的ubuntu系统方向键与退格键不能正常使用的问题
    数组 slice方法和splice方法的区别
    数组去重等数组实例
    JS实现表单全选以及取消全选实例
    JS实现表格隔行变色
  • 原文地址:https://www.cnblogs.com/wentianblog/p/3878756.html
Copyright © 2011-2022 走看看