1.廣告輪播圖,在不同的app上都能看到這樣的效果映砖,我用兩種方法實現(xiàn)了间坐,給大家說下思路,第一種是:如果有5張圖片邑退,5-1-2-3-4-5-1需要7個imageview來實現(xiàn)竹宋,添加UIPageContrl,NSTimer等這些基礎(chǔ)的東西地技,大家自己實現(xiàn)逝撬,這個這里只是講下具體代碼
- (void)initWithUIScrollView{
_scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, AppRealValue(180))];
_scrollView.contentSize = CGSizeMake(KScreenWidth * _imageArray.count, 0);
_scrollView.pagingEnabled = YES;
_scrollView.bounces = NO;
_scrollView.backgroundColor = [UIColor purpleColor];
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.delegate = self;
self.scrollView.contentOffset = CGPointMake(KScreenWidth, 0);
for (int i = 0; i < _imageArray.count; i++) {
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(KScreenWidth * i, 0, KScreenWidth, AppRealValue(180))];
imageView.image = [UIImage imageNamed:_imageArray[i]];
[self.scrollView addSubview:imageView];
}
[self.view addSubview:self.scrollView];
}
UIScrollView的代理方法來實現(xiàn)圖片滑動
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSInteger page = self.scrollView.contentOffset.x / KScreenWidth;
if (page == 0) {
[self.scrollView setContentOffset:CGPointMake(KScreenWidth * ([_imageArray count] - 2), 0) animated:NO];
self.pageControl.currentPage = [self.imageArray count] - 3;
}else if (page == [self.imageArray count] -1){
[self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
self.pageControl.currentPage = 0;
}else{
self.pageControl.currentPage = page - 1;
}
}
定時器自動顯示不同圖片
- (void)nextImage{
NSInteger page = self.pageControl.currentPage;
if (page == [self.imageArray count] - 3) {
self.pageControl.currentPage = 0;
[self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
}else{
self.pageControl.currentPage = page + 1;
[self.scrollView setContentOffset:CGPointMake(KScreenWidth * (self.pageControl.currentPage + 1), 0) animated:NO];
}
}
上面這種方法,可能在圖片比較多的時候宪潮,沒有下面這種方法好,而且動畫也不如下面這種
2.第二種方法是創(chuàng)建3個ImageView
設(shè)置ImageView
- (void)setUpImageView{
self.leftImage = [[UIImageView alloc]init];
self.leftImage.image = [UIImage imageNamed:[_arrayImage lastObject]];
[self.scrollView addSubview:self.leftImage];
self.centerImage = [[UIImageView alloc]init];
self.centerImage.image = [UIImage imageNamed:_arrayImage[0]];
[self.scrollView addSubview:self.centerImage];
self.rightImage = [[UIImageView alloc]init];
self.rightImage.image = [UIImage imageNamed:_arrayImage[1]];
[self.scrollView addSubview:self.rightImage];
}
注意:scrollView的contentSize的設(shè)置
self.scrollView.contentSize = CGSizeMake(3 * KScreenWidth, 0);
[self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
設(shè)置刷新圖片
- (void)reloadImage{
NSInteger page = self.scrollView.contentOffset.x / KScreenWidth;
if (page == 0)
{
_currentPage = ((_currentPage - 1 + _arrayImage.count) % [_arrayImage count]);
_leftImage.image = [UIImage imageNamed:_arrayImage[(_currentPage - 1 + _arrayImage.count) % _arrayImage.count]];
_centerImage.image = [UIImage imageNamed:_arrayImage[_currentPage]];
_rightImage.image = [UIImage imageNamed:_arrayImage[(_currentPage + 1 + _arrayImage.count ) % _arrayImage.count]];
}else if (page == 2){
_currentPage = (_currentPage + 1) % _arrayImage.count;
_leftImage.image = [UIImage imageNamed:_arrayImage[(_currentPage - 1 ) % _arrayImage.count]];
_centerImage.image = [UIImage imageNamed:_arrayImage[_currentPage]];
_rightImage.image = [UIImage imageNamed:_arrayImage[(_currentPage + 1 ) % _arrayImage.count]];
}
[self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
}
UIScrollView的代理方法與定時器的圖片動畫
- (void)nextImage{
[UIView animateWithDuration:1.0 animations:^{
_scrollView.contentOffset = CGPointMake(KScreenWidth * 2, 0);
} completion:^(BOOL finished) {
[self reloadImage];
}];
NSInteger page = self.pageControl.currentPage;
if (page == _arrayImage.count - 1) {
self.pageControl.currentPage = 0;
}else{
self.pageControl.currentPage = _currentPage + 1;
}
}
#pragma mark ----UIScrollViewDelegate代理方法(停止加速時調(diào)用)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
[self reloadImage];
self.scrollView.contentOffset = CGPointMake(KScreenWidth,0);
self.pageControl.currentPage = _currentPage;
NSLog(@"停止了加速,停在第%ld頁",self.pageControl.currentPage + 1);
}
全部的代碼都已經(jīng)貼出來了趣苏,爸媽再也不用擔(dān)心我不會使用圖片輪播了狡相,謝謝大家!