zoukankan      html  css  js  c++  java
  • 封装分页功能

    #import <UIKit/UIKit.h>

     

    @interface LZJPageView : UIView

     

    /** 图片名数据 */

    @property (nonatomic, strong) NSArray *imageNames;

    + (instancetype)pageView;

    @end

     


     

     

     

     

    #import "LZJPageView.h"

     

    @interface LZJPageView () <UIScrollViewDelegate>

    @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

    @property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

     

     

    /** 定时器 */

    @property (nonatomic, weak) NSTimer *timer;

     

    @end

    @implementation LZJPageView

     

    - (void)awakeFromNib

    {

        // 1.单页的时候是否隐藏pageControl

        self.pageControl.hidesForSinglePage = YES;

        

        // 2.设置pageControl的图片

        [self.pageControl setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];

        [self.pageControl setValue:[UIImage imageNamed:@"other"]  forKeyPath: @"_pageImage"];

        

        // 3.开启定时器

        [self startTimer];

     

    }

     

    + (instancetype)pageView

    {

        return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil]  lastObject];

    }

     

    - (void)setImageNames:(NSArray *)imageNames

    {

        _imageNames = imageNames;

        // 0.移除之前添加的

        // subviews这个数组中每一个对象都执行removeFromSuperview

        [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

        

        // 1.根据图片名数据创建ImageView添加到scrollView

        CGFloat scrollViewW = self.scrollView.frame.size.width;

        CGFloat scrollViewH = self.scrollView.frame.size.height;

        NSUInteger count = imageNames.count;

        for (int i = 0; i < count; i ++) {

            UIImageView *imageView = [[UIImageView alloc] init];

            imageView.image = [UIImage imageNamed:imageNames[i]];

            imageView.frame = CGRectMake(i * scrollViewW, 0, scrollViewW, scrollViewH);

            [self.scrollView addSubview:imageView];

        }

        

        // 2.设置contentSize

        self.scrollView.contentSize = CGSizeMake(count * scrollViewW, 0);

        

        // 3.设置总页数

        self.pageControl.numberOfPages = count;

    }

     

    #pragma mark - 定时器相关的代码

    - (void)startTimer

    {

        // 返回一个自动执行的定时器对象

        self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@"123" repeats:YES];

        

        [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

    }

     

    - (void)stopTimer

    {

        [self.timer invalidate];

    }

     

    /**

     *  滚动到下一页

     */

    - (void)nextPage:(NSTimer *)timer

    {

        // 1.计算下一页的页码

        NSInteger page = self.pageControl.currentPage + 1;

        

        // 2.超过了最后一页

        if ( page == self.imageNames.count) {

            page = 0;

        }

        

        // 3.滚动到下一页

        [self.scrollView setContentOffset:CGPointMake(page * self.scrollView.frame.size.width, 0) animated:YES];

    }

     

    #pragma mark - UIScrollViewDelegate

     

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

        // 1.计算页码

        int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);

        

        // 2.设置页码

        self.pageControl.currentPage = page;

    }

     

    /**

     *  用户即将开始拖拽scrollView,停止定时器

     */

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

    {

        [self stopTimer];

    }

     

    /**

     *  用户已经停止拖拽scrollView,开启定时器

     */

    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

    {

        [self startTimer];

    }

     

    @end

  • 相关阅读:
    ADB server didn't ACK * failed to start daemon *
    老调重弹:年龄大了,码农何去何从(转)
    HR给应届生的黄金面试技巧
    Android自动开关机实现
    [Android实例] Android ShakeDetector(摇晃检测)教程详解
    Hadoop : MapReduce中的Shuffle和Sort分析
    获得和裁剪图片
    android bitmap compress(图片压缩)
    知识签名(signature of knowledge)
    SVN安装(eclipse)
  • 原文地址:https://www.cnblogs.com/liuzhenjie/p/5453337.html
Copyright © 2011-2022 走看看