图片轮播器

来源:互联网 发布:windows phone10虚拟机 编辑:程序博客网 时间:2024/06/06 04:13

只添加三个UIImageView 到UIScrollView中,通过对上一张、当前、下一张的图片切换来完成滚动。

将定时器加到forMode:NSRunLoopCommonModes 来保证及时正在滑动uitableview也能保证图片轮播器的正常定时滚动

先看到下面的图片




源代码如下,附件是整个工程所需的代码和图片资源。

//

//  ViewController.m

//  图片轮播器

//

//  Created by wusiping on 15/12/3.

//  Copyright (c) 2015 wusiping. All rights reserved.

//


#import "ViewController.h"


@interface ViewController ()<UIScrollViewDelegate>

@property(nonatomic,weak)UIScrollView *scrollView;

@property(nonatomic,weak)UIPageControl *pageControl;

@property(nonatomic,weak)UIImageView *preImageView;

@property(nonatomic,weak)UIImageView *currentImageView;

@property(nonatomic,weak)UIImageView *nextImageView;

@property(nonatomic,strong)NSArray *imageArray;

@property(nonatomic,assign)BOOL isDragging;

@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    _isDragging = NO;

    [selfsetUpImageArray];

    [selfsetUpScrollView];

    [selfsetUpPageControl];

    [selfsetUpImageView];

    [self timer];

}


//初始化图片数组

- (void)setUpImageArray

{

    NSArray *array = [[NSArrayalloc]initWithObjects:@"img_01",@"img_02",@"img_03",@"img_04",@"img_05",nil];

    _imageArray = array;

}


//初始化滚动视图

- (void)setUpScrollView

{

    UIScrollView *scrollView = [[UIScrollViewalloc]init];

    CGFloat scrollViewX = 0;

    CGFloat scrollViewY = 20;

    CGFloat scrollViewW = [UIScreenmainScreen].bounds.size.width;

    CGFloat scrollViewH = [UIScreenmainScreen].bounds.size.height *2/6;

    CGRect scrollViewF = CGRectMake(scrollViewX, scrollViewY, scrollViewW, scrollViewH);

    scrollView.frame = scrollViewF;

    scrollView.backgroundColor = [UIColorredColor];

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

    scrollView.pagingEnabled = YES;

    scrollView.contentOffset = CGPointMake(scrollViewW , 0);

    _scrollView = scrollView;

    _scrollView.delegate =self;

    [self.viewaddSubview:_scrollView];

}


//添加上一张图片、当前图片、下一张图片到滚动图

- (void)setUpImageView

{

    CGFloat imageViewY = 0;

    CGFloat imageViewW = [UIScreenmainScreen].bounds.size.width;

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

    

    //前一张

    UIImageView *preImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:_imageArray[_imageArray.count -1] ]];

    CGFloat preImageViewX = 0;

    CGRect preImageViewF = CGRectMake(preImageViewX, imageViewY, imageViewW, imageViewH);

    preImageView.frame = preImageViewF;

    _preImageView = preImageView;

    [self.scrollViewaddSubview:_preImageView];

    

    //当前图片

    UIImageView *currentImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:_imageArray[0]]];

    CGFloat currentImageViewX = imageViewW;

    CGRect currentImageViewF = CGRectMake(currentImageViewX, imageViewY, imageViewW, imageViewH);

    currentImageView.frame = currentImageViewF;

    _currentImageView = currentImageView;

    [self.scrollViewaddSubview:_currentImageView];


    //后一张图片

    UIImageView *nextImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:_imageArray[1]]];

    CGFloat nextImageViewX = imageViewW * 2;

    CGRect nextImageViewF = CGRectMake(nextImageViewX, imageViewY, imageViewW, imageViewH);

    nextImageView.frame = nextImageViewF;

    _nextImageView = nextImageView;

    [self.scrollViewaddSubview:_nextImageView];

    

}


//初始化分页控制器

- (void)setUpPageControl

{

    UIPageControl *pageControl = [[UIPageControlalloc]init];

    CGFloat pageControlX = 0;

    CGFloat pageControlW = 100;

    CGFloat pageControlH = 30;

    CGFloat pageControlY = CGRectGetMaxY(self.scrollView.frame) - pageControlH;

    CGRect pageControlF = CGRectMake(pageControlX, pageControlY, pageControlW, pageControlH);

    pageControl.frame = pageControlF;

    pageControl.numberOfPages = _imageArray.count;

    pageControl.currentPage = 0;

    self.pageControl = pageControl;

    [self.viewaddSubview:_pageControl];

}


//定时器

- (void)timer

{

    NSTimer *time = [NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(nextImage:)userInfo:nilrepeats:YES];

    [[ NSRunLoopcurrentRunLoop] addTimer:timeforMode:NSRunLoopCommonModes];

}


- (void)nextImage:(BOOL)isDragging

{

    if (_isDragging ==YES) {

        return;

    }else{

        CGPoint offset = self.scrollView.contentOffset;

        offset.x += offset.x;

        [self.scrollViewsetContentOffset:offset animated:YES];

    }

}


#pragma 滚动图的代理方法

//在此方法中,不断更新上一张、当前、下一张图片


- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    static int i =0;

    NSLog(@" i等于 %d",i);

    self.pageControl.currentPage = i;

    CGFloat offset =self.scrollView.contentOffset.x;

    

    UIImage *nextImage = [UIImageimageNamed:_imageArray[i ==_imageArray.count -1 ? 0 : i +1]];

    _nextImageView.image = nextImage;

    

    UIImage *preImage = [UIImageimageNamed:_imageArray[i ==0 ? _imageArray.count -1 : i - 1]];

    _preImageView.image = preImage;

    

    if (offset == 0 ) {

        _currentImageView.image =_preImageView.image;

        if (i == 0) {

            i = _imageArray.count -1;

        }

        else

            i --;

        self.scrollView.contentOffset =CGPointMake([UIScreenmainScreen].bounds.size.width,0);


    }else if(offset == [UIScreenmainScreen].bounds.size.width *2)

    {

        _currentImageView.image =_nextImageView.image;

        if (i == _imageArray.count -1) {

            i = 0;

        }

        else

            i ++;

        self.scrollView.contentOffset =CGPointMake([UIScreenmainScreen].bounds.size.width,0);


    }


}


- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    _isDragging = YES;

    NSLog(@"开始拖拽");

}


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

{

    _isDragging = NO;

    NSLog(@"结束拖拽");

}


@end









0 0
原创粉丝点击