首页 > 移动平台 > 详细

iOS之UIScrollView循环滚动

时间:2016-02-25 15:13:22      阅读:258      评论:0      收藏:0      [点我收藏+]

#import "ViewController.h"

 

#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height

#define IMAGEVIEW_COUNT 3

 

@interface ViewController () <UIScrollViewDelegate> {

    UIScrollView *_scrollView;

    UIImageView *_leftImageView;

    UIImageView *_centerImageView;

    UIImageView *_rightImageView;

    UIPageControl *_pageControl;

    UILabel *_label;

    NSMutableDictionary *_imageData;//图片数据

    int _currentImageIndex;//当前图片索引

    int _imageCount;//图片总数

}

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    //加载数据

    [self loadImageData];

    //添加滚动控件

    [self addScrollView];

    //添加图片控件

    [self addImageViews];

    //添加分页控件

    [self addPageControl];

    //添加图片信息描述控件

    [self addLabel];

    //加载默认图片

    [self setDefaultImage];

}

#pragma mark 加载图片数据

-(void)loadImageData {

    //读取程序包路径中的资源文件

    NSString *path = [[NSBundle mainBundle] pathForResource:@"imageInfo" ofType:@"plist"];

    _imageData = [NSMutableDictionary dictionaryWithContentsOfFile:path];

    _imageCount = (int)_imageData.count;

}

 

#pragma mark 添加控件

-(void)addScrollView {

//    _scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20+20, SCREEN_WIDTH, 200)];

    _scrollView.backgroundColor = [UIColor lightGrayColor];

    //设置代理

    _scrollView.delegate = self;

    //设置滚动范围

    _scrollView.contentSize = CGSizeMake(IMAGEVIEW_COUNT*SCREEN_WIDTH, 0);

    //设置当前显示的位置为中间图片(设置scrollView偏移量)

    [_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0)];

    //设置分页

    _scrollView.pagingEnabled = YES;

    //隐藏水平条 竖向条

    _scrollView.showsHorizontalScrollIndicator = NO;

    _scrollView.showsVerticalScrollIndicator = NO;

    //关闭弹簧效果

//    _scrollView.bounces = NO;

    [self.view addSubview:_scrollView];

}

 

#pragma mark 添加图片三个控件

-(void)addImageViews {

    _leftImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];

    //会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白

    _leftImageView.contentMode=UIViewContentModeScaleAspectFit;

    [_scrollView addSubview:_leftImageView];

    

    _centerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];

    _centerImageView.contentMode = UIViewContentModeScaleAspectFit;

    [_scrollView addSubview:_centerImageView];

    

    _rightImageView = [[UIImageView alloc] initWithFrame:CGRectMake(2*SCREEN_WIDTH, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];

    _rightImageView.contentMode = UIViewContentModeScaleAspectFit;

    [_scrollView addSubview:_rightImageView];

}

#pragma mark 设置默认显示图片

-(void)setDefaultImage {

    //加载默认图片

    _leftImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",_imageCount-1]];

    _centerImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",0]];

    _rightImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",1]];

    _currentImageIndex = 0;

    //设置当前页

    _pageControl.currentPage = _currentImageIndex;

    NSString *imageName = [NSString stringWithFormat:@"%i.jpeg",_currentImageIndex];

    _label.text = _imageData[imageName];

}

 

#pragma mark 添加分页控件

-(void)addPageControl {

    _pageControl = [[UIPageControl alloc] init];

//    _pageControl.backgroundColor = [UIColor orangeColor];

    //注意此方法可以根据页数返回UIPageControl合适的大小

    CGSize size = [_pageControl sizeForNumberOfPages:_imageCount];

    _pageControl.bounds = CGRectMake(0, 0, size.width, size.height);

    _pageControl.center = CGPointMake(SCREEN_WIDTH*2/3, _scrollView.frame.origin.y+_scrollView.frame.size.height-10);

    //设置颜色

    _pageControl.pageIndicatorTintColor = [UIColor colorWithRed:193/255.0 green:219/255.0 blue:249/255.0 alpha:1];

    //设置当前页颜色

    _pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0 green:150/255.0 blue:1 alpha:1];

    //设置总页数

    _pageControl.numberOfPages = _imageCount;

    [self.view addSubview:_pageControl];

}

 

#pragma mark 添加信息描述控件

-(void)addLabel {

    _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, SCREEN_WIDTH, 20)];

//    _label.backgroundColor = [UIColor orangeColor];

    _label.textAlignment = NSTextAlignmentCenter;

    _label.textColor = [UIColor colorWithRed:0 green:150/255.0 blue:1 alpha:1];

    [self.view addSubview:_label];

}

 

#pragma mark 滚动停止事件

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    //重新加载图片

    [self reloadImage];

    //移动到中间

    [_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0)];

    //设置分页

    _pageControl.currentPage = _currentImageIndex;

    //设置描述

    NSString *imageName = [NSString stringWithFormat:@"%i.jpeg",_currentImageIndex];

    _label.text = _imageData[imageName];

}

 

#pragma mark 重新加载图片

-(void)reloadImage {

    int leftImageIndex,rightImageIndex;

    CGPoint offset = [_scrollView contentOffset];

    if (offset.x > SCREEN_WIDTH) { //向右滑动

        _currentImageIndex = (_currentImageIndex+1)%_imageCount;

    }else if(offset.x < SCREEN_WIDTH) { //向左滑动

        _currentImageIndex = (_currentImageIndex+_imageCount-1)%_imageCount;

    }

    _centerImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",_currentImageIndex]];

    

    //重新设置左右图片

    leftImageIndex = (_currentImageIndex+_imageCount-1)%_imageCount;

    rightImageIndex = (_currentImageIndex+1)%_imageCount;

    _leftImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",leftImageIndex]];

    _rightImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",rightImageIndex]];

}

@end

 

iOS之UIScrollView循环滚动

原文:http://www.cnblogs.com/rglmuselily/p/5216850.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!