iOS 简易无限滚动的图片轮播器 Demo事例

2015-10-18  本文已影响430人  JoshuaC

原文地址:http://blog.sina.com.cn/s/blog_6317728d0102vcpg.html

图片轮播器 在很多应用软件中都有应用 ,需要制作 无限滚动的 ,下面贴上自己写的小Demo, 能实现相关的功能。

Ps: 没有用到pageControl ,只是图片自动无限滚动 ,没有任何的 处理 。

#import "ViewController.h"

@interface ViewController : UIViewController

@property (nonatomic,weak) UIScrollView *scrollView;

@property (nonatomic,weak) UIImageView *currentImageView;  // 当前imageView

@property (nonatomic,weak) UIImageView *nextImageView;      // 下一个imageView

@property (nonatomic,weak) UIImageView *preImageView;      //上一个imageView

@property (nonatomic,assign) BOOL isDragging;              //是否正在拖动

@property (nonatomic,strong)NSTimer *timer;                //设置动画

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

UIScrollView *scrollView =[[UIScrollView alloc] init];

CGFloat width = self.view.frame.size.width;

CGFloat height = self.view.frame.size.height;

scrollView.frame = CGRectMake(0, 0, width, height);

[self.view addSubview:scrollView];

self.scrollView = scrollView;

[self.scrollView setContentSize:CGSizeMake(width * 3, height)];

//  设置隐藏横向条

self.scrollView.showsHorizontalScrollIndicator = NO;

//  设置自动分页

self.scrollView.pagingEnabled = YES;

//  设置代理

self.scrollView.delegate = self;

//  设置当前点

self.scrollView.contentOffset = CGPointMake(width, 0);

//  设置是否有边界

self.scrollView.bounces = NO;

//  初始化当前视图

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

currentImageView.image = [UIImage imageNamed:@"1.jpg"];

[self.scrollView addSubview:currentImageView];

self.currentImageView = currentImageView;

self.currentImageView.frame = CGRectMake(width, 0, width, height);

self.currentImageView.contentMode = UIViewContentModeScaleAspectFill;

//  初始化下一个视图

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

nextImageView.image = [UIImage imageNamed:@"2.jpg"];

[self.scrollView addSubview:nextImageView];

self.nextImageView = nextImageView;

self.nextImageView.frame = CGRectMake(width * 2, 0, width, height);

self.nextImageView.contentMode = UIViewContentModeScaleAspectFill;

//  初始化上一个视图

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

preImageView.image = [UIImage imageNamed:@"6.jpg"];

preImageView.frame = CGRectMake(0, 0, width, height);

[self.scrollView addSubview:preImageView];

self.preImageView = preImageView;

self.preImageView.contentMode =UIViewContentModeScaleAspectFill;

//  设置时钟动画 定时器

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(update:) userInfo:nil repeats:YES];

//  将定时器添加到主线程

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

}

- (void)update:(NSTimer *)timer{

//定时移动

if (_isDragging == YES) {

return ;

}

CGPoint offSet = self.scrollView.contentOffset;

offSet.x +=offSet.x;

[self.scrollView setContentOffset:offSet animated:YES];

if (offSet.x >= self.view.frame.size.width *2) {

offSet.x = self.view.frame.size.width;

}

}

#pragma mark - UIScrollViewDelegate

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

_isDragging = YES;

}

//  停止滚动

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

_isDragging = NO;

step = 0;

}

// 开始拖动

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

static int i =1; //  当前展示的是第几张图片

float offset = self.scrollView.contentOffset.x;

if (self.nextImageView.image == nil || self.preImageView.image == nil) {

//  加载下一个视图

NSString *imageName1 = [NSString stringWithFormat:@"%d.jpg",i == KOUNT ? 1:i +1];

_nextImageView.image = [UIImage imageNamed:imageName1];

// 加载上一个视图

NSString *imageName2 = [NSString stringWithFormat:@"%d.jpg",i==1 ? KOUNT :i-1];

_preImageView.image = [UIImage imageNamed:imageName2];

}

if(offset ==0){

_currentImageView.image = _preImageView.image;

scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);

_preImageView.image = nil;

if (i == 1) {

i =KOUNT;

} else{

i-=1;

}

}

if (offset == scrollView.bounds.size.width * 2) {

_currentImageView.image = _nextImageView.image;

scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);

_nextImageView.image = nil;

if (i == KOUNT) {

i  =1 ;

}else{

i +=1 ;

}

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

其中图片的名称 是我自己添加的 ,从1到KOUNT  , 通过scrollView 的三层  实现 图片的无限滚动。

上一篇下一篇

猜你喜欢

热点阅读