关于ios图片无限轮播
2015-09-01 17:54
204 查看
这几天需要写一个图片的无线轮播器。所以去网上看了一下,比照着人家的方法,自己的demo大家可以看一下。
#import "ViewController.h"
@interface
ViewController ()<UIScrollViewDelegate>
@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,strong)NSTimer *timer;
//设置动画
@property(nonatomic,retain)NSArray *array;//图片数组
@property(nonatomic,weak)UIPageControl *page;//分页
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
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 *
4, height)];
//
设置隐藏横向条
self.scrollView.showsHorizontalScrollIndicator =
NO;
//
设置自动分页
self.scrollView.pagingEnabled =
YES;
//
设置代理
self.scrollView.delegate =
self;
//
设置当前点
self.scrollView.contentOffset =
CGPointMake(width,
0);
//
设置是否有边界
self.scrollView.bounces =
NO;
self.array=@[@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg",@"5.jpg",@"6.jpg",@"7.jpg",];
UIPageControl *page=[[UIPageControl
alloc]initWithFrame:CGRectMake(100,
200,
200, 100)];
self.page=page;
[self.view
addSubview:self.page];
self.page.numberOfPages=self.array.count;
self.page.currentPageIndicatorTintColor=[UIColor
redColor];
//
初始化当前视图
UIImageView *currentImageView =[[UIImageView
alloc] init];
currentImageView.image = [UIImage
imageNamed:self.array[0]];
[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:self.array[1]];
[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:self.array[2]];
preImageView.frame =
CGRectMake(0,
0, width, height);
[self.scrollView
addSubview:preImageView];
self.preImageView = preImageView;
//self.preImageView.contentMode =UIViewContentModeScaleAspectFill;
[self
loadTimer];
}
//开始
-(void)loadTimer
{
self.timer = [NSTimer
scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(update:)
userInfo:nil
repeats:YES];
}
- (void)update:(NSTimer *)timer{
//定时移动
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;
}
//有点错误
self.page.currentPage++;
if (self.page.currentPage==self.array.count-1)
{
self.page.currentPage=0;
}
}
//停止
-(void)stopTimer
{
[self.timer
invalidate];
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self
stopTimer];
}
// 停止滚动
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self
loadTimer];
}
// 开始拖动
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
static
NSInteger i =1;
//当前展示的是第几张图片
float offset = self.scrollView.contentOffset.x;
if (self.nextImageView.image ==
nil || self.preImageView.image ==
nil) {
//
加载下一个视图
NSString *imageName1 = [NSString
stringWithFormat:@"%ld.jpg",i ==
self.array.count ?
1:i +1];
_nextImageView.image = [UIImage
imageNamed:imageName1];
//
加载上一个视图
NSString *imageName2 = [NSString
stringWithFormat:@"%lu.jpg",(unsigned
long)(i==1 ?
self.array.count :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 =self.array.count;
}
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 == 7) {
i =1 ;
}else{
i +=1 ;
}
}
}
@end
可以直接运行
#import "ViewController.h"
@interface
ViewController ()<UIScrollViewDelegate>
@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,strong)NSTimer *timer;
//设置动画
@property(nonatomic,retain)NSArray *array;//图片数组
@property(nonatomic,weak)UIPageControl *page;//分页
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
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 *
4, height)];
//
设置隐藏横向条
self.scrollView.showsHorizontalScrollIndicator =
NO;
//
设置自动分页
self.scrollView.pagingEnabled =
YES;
//
设置代理
self.scrollView.delegate =
self;
//
设置当前点
self.scrollView.contentOffset =
CGPointMake(width,
0);
//
设置是否有边界
self.scrollView.bounces =
NO;
self.array=@[@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg",@"5.jpg",@"6.jpg",@"7.jpg",];
UIPageControl *page=[[UIPageControl
alloc]initWithFrame:CGRectMake(100,
200,
200, 100)];
self.page=page;
[self.view
addSubview:self.page];
self.page.numberOfPages=self.array.count;
self.page.currentPageIndicatorTintColor=[UIColor
redColor];
//
初始化当前视图
UIImageView *currentImageView =[[UIImageView
alloc] init];
currentImageView.image = [UIImage
imageNamed:self.array[0]];
[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:self.array[1]];
[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:self.array[2]];
preImageView.frame =
CGRectMake(0,
0, width, height);
[self.scrollView
addSubview:preImageView];
self.preImageView = preImageView;
//self.preImageView.contentMode =UIViewContentModeScaleAspectFill;
[self
loadTimer];
}
//开始
-(void)loadTimer
{
self.timer = [NSTimer
scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(update:)
userInfo:nil
repeats:YES];
}
- (void)update:(NSTimer *)timer{
//定时移动
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;
}
//有点错误
self.page.currentPage++;
if (self.page.currentPage==self.array.count-1)
{
self.page.currentPage=0;
}
}
//停止
-(void)stopTimer
{
[self.timer
invalidate];
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self
stopTimer];
}
// 停止滚动
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self
loadTimer];
}
// 开始拖动
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
static
NSInteger i =1;
//当前展示的是第几张图片
float offset = self.scrollView.contentOffset.x;
if (self.nextImageView.image ==
nil || self.preImageView.image ==
nil) {
//
加载下一个视图
NSString *imageName1 = [NSString
stringWithFormat:@"%ld.jpg",i ==
self.array.count ?
1:i +1];
_nextImageView.image = [UIImage
imageNamed:imageName1];
//
加载上一个视图
NSString *imageName2 = [NSString
stringWithFormat:@"%lu.jpg",(unsigned
long)(i==1 ?
self.array.count :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 =self.array.count;
}
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 == 7) {
i =1 ;
}else{
i +=1 ;
}
}
}
@end
可以直接运行
相关文章推荐
- 64.iOS AutoLayout自动布局中级开发教程(5)-修改约束的值,延迟加载
- 63.iOS AutoLayout自动布局中级开发教程(4)-label文字自动适应大小,宽度(新)
- iOS开发-正则表达式的使用方法
- 57.阐明iOS证书和provision文件
- IOS判断手机设备是否支持照相功能
- iOS_33_音乐播放(后台播放+锁屏歌词)
- ipa重签名
- 48.iOS8 xcode6/iphone6plus适配--不适配启用的是兼容模式
- 44.iOS学习笔记—Category和Extension
- ios8使用ALAssetsLibrar创建单独文件夹方法以及删除文件夹闪退的bug
- IOS开发之 ---- 振动强度和时间(私有api)
- 34.iOS计算时间差,返回差值---xx天xx小时xx秒
- 35.iOS7与iOS8 适配是否开启推送功能 返回Bool值
- 32.CGBitmapContextCreate 在配备Retina的设备上绘制模糊的 解决方法 iOS截屏模糊
- IOS第17天(3,Quartz2D画板和画线)
- IOS学习笔记 ---- 15/09/01
- 30.ios 8 访问通讯录兼容问题,ABPeoplePickerNavigationController
- 31.ios 防止按钮快速点击造成多次响应的避免方法。 取消正在执行中的方法
- 29. IOS系统原生富文本 自定义Label颜色
- IOS第17天(2,Quartz2D图片剪裁变圆行图,和截屏图片)