天天看點

UIScrollView配合定時器自動循環滾動

@property (strong, nonatomic) UIScrollView *scrollView;

@property (strong, nonatomic)UIPageControl *pageControl;

//定時器

@property(strong,nonatomic)NSTimer  * timer;

- (void)viewDidLoad {

    [super viewDidLoad];

 _timeIndex=0;

    _timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(scrollChange) userInfo:nil repeats:YES];

}

//定時器執行方法

-(void)scrollChange

{

    _timeIndex++;

    if (_timeIndex == 5) {

      //  NSLog(@"_timeIndex = %ld",_timeIndex);

        _timeIndex = 1;

        _scrollView.contentOffset = CGPointMake(WIDTH * _timeIndex, 0);

    }else if(_timeIndex == 6)

    {

        _timeIndex = 3;

        _scrollView.contentOffset = CGPointMake(WIDTH * _timeIndex, 0);

    }

     else  {

        _scrollView.contentOffset = CGPointMake(_timeIndex *WIDTH,0);

    }

}

//将開始拖拽時使定時器停止

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    NSLog(@"1");

    [_timer invalidate];

    _timer = nil;

}

//拖拽結束時再開啟定時器

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

    NSLog(@"@@");

    _timeIndex = scrollView.contentOffset.x/WIDTH ;

    NSLog(@"_timeIndex = %ld",_timeIndex);

    _timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(scrollChange) userInfo:nil repeats:YES];

}

//scrollview發生變動時調用此方法,多次調用

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

{

     //防止同一個view上其他的scrollview同時調用此方法

    if (scrollView.tag ==200) {  

        UIPageControl * pc = (UIPageControl *)[self.view viewWithTag:10];

       // _timeIndex++;

        int currentPage =scrollView.contentOffset.x/WIDTH;

       // NSLog(@"currentPage = %d",currentPage);

        if (currentPage > 5) {

            _scrollView.contentOffset = CGPointMake(WIDTH * 2, 0);

        } else if (currentPage<1) {

            _scrollView.contentOffset = CGPointMake(4*WIDTH,0);

            pc.currentPage = 4;

        }

        if (currentPage >0 && currentPage < 5) {

            pc.currentPage = currentPage-1;

        }else if (currentPage == 5)

        {

            pc.currentPage = 0;

        }else if (currentPage == 6)

        {

            pc.currentPage = 1;

        }else if(currentPage == 0)

        {

            pc.currentPage = 3;

        }      

    }

}