UIScrollView實現迴圈滾動和自動滾動
RootViewController.m
@interface RootViewController ()<UIScrollViewDelegate>
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) NSMutableArray *imageViewArr;
@end
@implementation
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
/*
啟動定時器,實現scrollerView的自動轉換
*/
// [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
/*
初始化
*/
self.scrollView = [[UIScrollViewalloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
[self.scrollView setBounces:YES];
[self.scrollViewsetPagingEnabled:YES];//設定翻頁
[self.scrollViewsetUserInteractionEnabled:YES];
/*
水平和垂直的滾動條會作為兩個子檢視新增到scrollerView中,
如果把滾動條效果關閉
*/
[self.scrollViewsetShowsHorizontalScrollIndicator:NO];
[self.scrollViewsetShowsVerticalScrollIndicator:NO];
[self.scrollViewsetDelegate:self];
[self.view addSubview:self.scrollView];
[self.scrollViewrelease];
/*
初始化陣列
*/
self.imageViewArr = [NSMutableArrayarray];
for (NSInteger i = 1; i < 5; i++) {
[self.imageViewArraddObject:[NSStringstringWithFormat:@"image%ld.jpg",i]];
}
/*
初始化Pagecontrol
*/
self.pageControl = [[UIPageControlalloc] initWithFrame:CGRectMake(120, 480, 100, 28)];
[self.pageControlsetCurrentPageIndicatorTintColor:[UIColorredColor]];
[self.pageControlsetPageIndicatorTintColor:[UIColorblackColor]];
[self.pageControlsetNumberOfPages:[self.imageViewArrcount]];
[self.pageControlsetCurrentPage:0];
[self.pageControladdTarget:selfaction:@selector(turnPage) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.pageControl];
[self.pageControlrelease];
/*
建立四個圖片,新增到scrollerView
*/
for (NSInteger i = 0; i < 4; i++) {
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.imageViewArr[i]]];
[imageView setFrame:CGRectMake(320 * (i + 1), 0, 320, 460)];
[self.scrollView addSubview:imageView];
[imageView release];
}
/*
取陣列最後一張圖片,放在第 0 頁
*/
UIImageView *imageView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.imageViewArr[(self.imageViewArr.count - 1)]]];
[imageView1 setFrame:CGRectMake(0, 0, 320, 460)];
[self.scrollView addSubview:imageView1];
[imageView1 release];
/*
取陣列的第一張圖片放在最後一頁
*/
UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.imageViewArr[0]]];
[imageView2 setFrame:CGRectMake(320 * (self.imageViewArr.count + 1), 0, 320, 460)];
[self.scrollView addSubview:imageView2];
[imageView2 release];
[self.scrollViewsetContentSize:CGSizeMake(320 * ([self.imageViewArrcount] + 2), 460)];
/*
設定初次偏移量
*/
[self.scrollViewsetContentOffset:CGPointMake(0, 0)];
/*
此方法滾動檢視內容,以便由rect定義的區域僅僅是滾動檢視內是可見的。
如果該地區已是可見的,該方法什麼都不做
*/
[self.scrollViewscrollRectToVisible:CGRectMake(320, 0, 320, 460) animated:NO];
NSLog(@"count = %ld",self.imageViewArr.count);
}
#pragma mark - scrollerView的委託函式
#pragma mark - 當scrollerView滾動時觸發的方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
int page = (int)self.scrollView.contentOffset.x / 320;
page -- ;// 預設從第二頁開始
[self.pageControl setCurrentPage:page];
// NSLog(@"%f",self.scrollView.contentOffset.x);
}
#pragma mark - 當scrollerView滾動減速後停止時觸發的方法
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
int currentPage = (int)self.scrollView.contentOffset.x / 320;
NSLog(@"%f",self.scrollView.contentOffset.x);
if (currentPage == 0) {
[self.scrollViewscrollRectToVisible:CGRectMake(320 * self.imageViewArr.count, 0, 320, 460) animated:NO];
NSLog(@"0");
}else if(currentPage == ([self.imageViewArr count] + 1)){
[self.scrollViewscrollRectToVisible:CGRectMake(320, 0, 320, 460) animated:NO];
NSLog(@"5");
}
}
#pragma mark - pageControl選擇器方法
-(void)turnPage{
NSInteger page = self.pageControl.currentPage;
[self.scrollViewscrollRectToVisible:CGRectMake((320 * page + 1), 0, 320, 460) animated:NO];
}
#pragma mark - 定時器方法
-(void)runTimePage{
NSInteger page = self.pageControl.currentPage; // 獲取當前的page
page++;
page = page > 3 ? 0 : page ;
self.pageControl.currentPage = page;
[self turnPage];
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)dealloc{
[self.pageControlrelease];
[self.scrollViewrelease];
[self.imageViewArrrelease];
[super dealloc];
}