輪播

輪播:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容