輪播:
UIScrollview輪播
UICollectionView輪播
實(shí)現(xiàn)步驟:
(1)添加并設(shè)置定時(shí)器
(2)設(shè)置定時(shí)器的調(diào)用方法
? ? ? ? 獲取當(dāng)前正在展示的位置
? ? ? ?計(jì)算出下一個(gè)需要展示的位置
? ? ? ?通過動(dòng)畫滾動(dòng)到下一個(gè)位置
? ? ? ?注意點(diǎn):需要進(jìn)行判斷
步驟:
1.聲明:
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIPageControl *pageControl;
@property (nonatomic, strong) NSTimer *timer;
2.創(chuàng)建UIScrollView
- (UIScrollView *)scrollView
{ ? ?if (_scrollView == nil) {
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 20, 300, 130)];
_scrollView.backgroundColor = [UIColor redColor];
[self.view addSubview:_scrollView];
_scrollView.bounces = NO;// 取消彈簧效果
_scrollView.showsHorizontalScrollIndicator = NO;// 取消水平滾動(dòng)條
_scrollView.showsVerticalScrollIndicator = NO;// 取消水平滾動(dòng)條
_scrollView.pagingEnabled = YES;// 要分頁
_scrollView.contentSize = CGSizeMake(kImageCount * _scrollView.bounds.size.width, 0);// contentSize
_scrollView.delegate = self;// 設(shè)置代理
}? return _scrollView; }
3.創(chuàng)建UIPageControl
- (UIPageControl *)pageControl
{ ??if (_pageControl == nil) {
_pageControl = [[UIPageControl alloc] init];// 分頁控件
_pageControl.numberOfPages = kImageCount;// 總頁數(shù)
// 控件尺寸
CGSize size = [_pageControl sizeForNumberOfPages:kImageCount];
_pageControl.bounds = CGRectMake(0, 0, size.width, size.height);
_pageControl.center = CGPointMake(self.view.center.x, 130);
_pageControl.pageIndicatorTintColor = [UIColor redColor];
_pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
[self.view addSubview:_pageControl];
?添加監(jiān)聽方法
/** 在OC中,絕大多數(shù)"控件",都可以監(jiān)聽UIControlEventValueChanged事件,button除外" */
[_pageControl addTarget:self action:@selector(pageChanged:) forControlEvents:UIControlEventValueChanged];
} ?return _pageControl; ?}
分頁控件的監(jiān)聽方法
- (void)pageChanged:(UIPageControl *)page
{ ??NSLog(@"%d", page.currentPage);
// 根據(jù)頁數(shù),調(diào)整滾動(dòng)視圖中的圖片位置 contentOffset
CGFloat x = page.currentPage * self.scrollView.bounds.size.width;
//設(shè)置contentoffset
[self.scrollView setContentOffset:CGPointMake(x, 0) animated:YES]; ?}
視圖加載完成調(diào)用,通常用來設(shè)置數(shù)據(jù)
- (void)viewDidLoad
{ ?[super viewDidLoad];
// 添加圖片
for (int i = 0; i < kImageCount; i++) {
NSString *imageName = [NSString stringWithFormat:@"img_%02d", i + 1];
UIImage *image = [UIImage imageNamed:imageName];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.scrollView.bounds];
imageView.image = image;
[self.scrollView addSubview:imageView]; ?}
// 計(jì)算imageView的位置
[self.scrollView.subviews enumerateObjectsUsingBlock:^(UIImageView *imageView, NSUInteger idx, BOOL *stop) {
// 調(diào)整x => origin => frame
CGRect frame = imageView.frame;
frame.origin.x = idx * frame.size.width;
imageView.frame = frame;
}];
//? ? NSLog(@"%@", self.scrollView.subviews);
self.pageControl.currentPage = 0;? // 分頁初始頁數(shù)為0
[self startTimer];? }? ? // 啟動(dòng)時(shí)鐘
- (void)startTimer
{ ?self.timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
// 添加到運(yùn)行循環(huán)
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; ?}
- (void)updateTimer
{ ? ?// 頁號發(fā)生變化
// (當(dāng)前的頁數(shù) + 1) % 總頁數(shù)
int page = (self.pageControl.currentPage + 1) % kImageCount;
self.pageControl.currentPage = page;
NSLog(@"%d", self.pageControl.currentPage);
// 調(diào)用監(jiān)聽方法,讓滾動(dòng)視圖滾動(dòng)
[self pageChanged:self.pageControl];?}
#pragma mark - ScrollView的代理方法
// 滾動(dòng)視圖停下來,修改頁面控件的小點(diǎn)(頁數(shù))
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{ ?// 停下來的當(dāng)前頁數(shù)
NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
// 計(jì)算頁數(shù)
int page = scrollView.contentOffset.x / scrollView.bounds.size.width;
self.pageControl.currentPage = page;?}
修改時(shí)鐘所在的運(yùn)行循環(huán)的模式后,抓不住圖片
解決方法:抓住圖片時(shí),停止時(shí)鐘,送售后,開啟時(shí)鐘
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{ ?NSLog(@"%s", __func__);
// 停止時(shí)鐘,停止之后就不能再使用,如果要啟用時(shí)鐘,需要重新實(shí)例化
[self.timer invalidate]; ?}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{ ?NSLog(@"%s", __func__);
[self startTimer]; ?}
原文鏈接:http://www.itdecent.cn/p/bcf52689b28b