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
  • 相关阅读:
    使用树莓派打造远程WEB服务器
    oracle 12c新建pdb实例
    word标题变成黑色方块解决
    idea 报JDBC连接失败原因之一
    maven项目pom.xml需要的一些配置
    Mysql时区无法识别
    数据库报ORA-12514
    win10无法在桌面右键快捷打开个性化设置、显示设置,在任务栏右键无法快捷打开任务栏设置
    Tomcat部署项目时,发布的项目页面部分乱码,且页面渲染文件也是乱码。
    高性能、高稳定性的跨平台MQTT客户端
  • 原文地址:https://www.cnblogs.com/wentianblog/p/3878756.html
Copyright © 2011-2022 走看看