#import "ViewController.h"
@interface ViewController : UIViewController <</span>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,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
圖檔輪播器 在很多應用軟體中都有應用 ,需要制作 無限滾動的 ,下面貼上自己寫的小Demo, 能實作相關的功能。
Ps: 沒有用到pageControl ,隻是圖檔自動無限滾動 ,沒有任何的 處理 。