这几天需要写一个图片的无线轮播器。所以去网上看了一下,比照着人家的方法,自己的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
可以直接运行
本文详细介绍了如何使用Objective-C实现一个图片无线轮播器的功能,包括布局、动画、分页以及定时切换等关键部分。
1435

被折叠的 条评论
为什么被折叠?



