1. 程式人生 > >UIScrollView實現迴圈滾動和自動滾動

UIScrollView實現迴圈滾動和自動滾動

RootViewController.m

@interface RootViewController ()<UIScrollViewDelegate>

@property (nonatomic, retain) UIPageControl         *pageControl;

@property (nonatomic, retain) UIScrollView          *scrollView;

@property (nonatomic, retain) NSMutableArray        *imageViewArr;

@end

@implementation

RootViewController

- (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];

    /*

        初始化

ScrollerView

     */

self.scrollView = [[UIScrollViewalloc] initWithFrame:CGRectMake(0, 0, 320, 460)];

    [self.scrollView setBounces:YES];

    [self.scrollViewsetPagingEnabled:YES];//設定翻頁

    [self.scrollViewsetUserInteractionEnabled:YES];

    /*

        水平和垂直的滾動條會作為兩個子檢視新增到scrollerView,

        如果把滾動條效果關閉

,則不會新增到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];

}