輪播器無限循環(huán)播放

#define kmainScreenW [UIScreen mainScreen].bounds.size.width#define kmainScreenH [UIScreen mainScreen].bounds.size.height#import "ViewController.h"@interface ViewController ()@property (nonatomic ,weak) UIScrollView *scrollView;

@property (nonatomic ,weak) UIImageView *imageViewLeft;

@property (nonatomic ,weak) UIImageView *imageViewCenter;

@property (nonatomic ,weak) UIImageView *imageViewRight;

@property (nonatomic ,strong) NSArray *dataArray;

@property (nonatomic ,weak) UIPageControl *pageControl;

@property (nonatomic ,assign) NSInteger currentImageIndex;

@property (nonatomic ,weak) NSTimer *timer;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

NSArray *dataArray = @[@"image1",@"image2",@"image3",@"image4"];

_dataArray = dataArray;

_currentImageIndex = 0;

[self setUpScrollView];

[self setUpImageView];

if (dataArray.count >= 2) {

[self setUpPageConrol];

[self setUpTimer];

}

}

//添加ScrollView

- (void)setUpScrollView{

UIScrollView *scrollView = [[UIScrollView alloc] init];

scrollView.frame = CGRectMake(0, 0, kmainScreenW, kmainScreenW *0.6);

//? ? scrollView.backgroundColor = [UIColor blueColor];

[self.view addSubview:scrollView];

scrollView.contentSize = CGSizeMake(_dataArray.count *kmainScreenW, kmainScreenW * 0.6);

scrollView.delegate = self;

[scrollView setContentOffset:CGPointMake(kmainScreenW, 0) animated:NO];

scrollView.pagingEnabled = YES;

scrollView.showsHorizontalScrollIndicator = NO;

_scrollView = scrollView;

}

//添加ImageView

- (void)setUpImageView{

if (_dataArray.count >= 2) {

UIImageView *imageViewLeft = [[UIImageView alloc] init];

imageViewLeft.frame = CGRectMake(0, 0, kmainScreenW, kmainScreenW *0.6);

[_scrollView addSubview:imageViewLeft];

imageViewLeft.image = [UIImage imageNamed:_dataArray[_dataArray.count-1]];

_imageViewLeft = imageViewLeft;

}

UIImageView *imageViewCenter = [[UIImageView alloc] init];

imageViewCenter.frame = CGRectMake(kmainScreenW, 0, kmainScreenW, kmainScreenW *0.6);

[_scrollView addSubview:imageViewCenter];

if (_dataArray.count >= 1) {

imageViewCenter.image = [UIImage imageNamed:_dataArray[0]];

}

//? ? imageViewCenter.backgroundColor = [UIColor redColor];

_imageViewCenter = imageViewCenter;

if (_dataArray.count >= 2) {

UIImageView *imageViewRight = [[UIImageView alloc] init];

imageViewRight.frame = CGRectMake(kmainScreenW *2.0, 0, kmainScreenW, kmainScreenW *0.6);

[_scrollView addSubview:imageViewRight];

imageViewRight.image = [UIImage imageNamed:_dataArray[1]];

_imageViewRight = imageViewRight;

}

}

//添加PageConrol

- (void)setUpPageConrol{

UIPageControl *pageControl = [[UIPageControl alloc] init];

CGSize size = [pageControl sizeForNumberOfPages:_dataArray.count];

pageControl.bounds = CGRectMake(0, 0, size.width, size.height);

pageControl.center = CGPointMake(kmainScreenW *0.5, size.height);

pageControl.pageIndicatorTintColor = [UIColor whiteColor];

pageControl.currentPageIndicatorTintColor = [UIColor redColor];

pageControl.numberOfPages = _dataArray.count;

_pageControl = pageControl;

[self.view addSubview:pageControl];

}

// 添加定時器

- (void)setUpTimer{

NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(timerChanged) userInfo:nil repeats:YES];

self.timer = timer;

[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

}

//定時器生效,圖片自動輪播

- (void)timerChanged{

NSInteger page = (_pageControl.currentPage + 1)%_dataArray.count;

_pageControl.currentPage = page;

[self pageChanged:_pageControl];

}

//頁面變動

- (void)pageChanged: (UIPageControl *)pageControl{

CGFloat x = 2 * kmainScreenW;

//? ? [_scrollView setContentOffset:CGPointMake(x, 0) animated:YES];

//? ? _currentImageIndex = pageControl.currentPage;

//? ? [self scrollViewDidEndDecelerating:_scrollView];

NSInteger leftImageIndex,rightImageIndex;

CGPoint offset = [_scrollView contentOffset];

_currentImageIndex = (_currentImageIndex + 1) %_dataArray.count;

leftImageIndex = (_currentImageIndex? - 1 + _dataArray.count)%_dataArray.count;

rightImageIndex = (_currentImageIndex + 1)%_dataArray.count;

_imageViewCenter.image = [UIImage imageNamed:_dataArray[_currentImageIndex]];

_imageViewLeft.image = [UIImage imageNamed:_dataArray[leftImageIndex]];

_imageViewRight.image = [UIImage imageNamed:_dataArray[rightImageIndex]];

_pageControl.currentPage = _currentImageIndex;

[UIView animateWithDuration:1.0 animations:^{

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

}];

_scrollView.contentOffset = CGPointMake(kmainScreenW,0);

}

//滑動開始的時候停止定時器

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

[_timer invalidate];

}

//滑動完畢的時候啟動定時器

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

[self setUpTimer];

}

//設(shè)置無限循環(huán)播放

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

[self reloadImage];

[_scrollView setContentOffset:CGPointMake(kmainScreenW, 0) animated:NO];

//? ? _scrollView.contentOffset = CGPointMake(kmainScreenW,0);//兩個方法都可以

_pageControl.currentPage = _currentImageIndex;

}

//重新加載圖片

- (void)reloadImage{

NSInteger leftImageIndex,rightImageIndex;

CGPoint offset = [_scrollView contentOffset];

if (offset.x >kmainScreenW) {//向右滑動

_currentImageIndex = (_currentImageIndex + 1) %_dataArray.count;

}else if(offset.x < kmainScreenW){//向左滑動

_currentImageIndex = (_currentImageIndex - 1 + _dataArray.count) %_dataArray.count;

}

leftImageIndex = (_currentImageIndex? - 1 + _dataArray.count)%_dataArray.count;

rightImageIndex = (_currentImageIndex + 1)%_dataArray.count;

_imageViewCenter.image = [UIImage imageNamed:_dataArray[_currentImageIndex]];

_imageViewLeft.image = [UIImage imageNamed:_dataArray[leftImageIndex]];

_imageViewRight.image = [UIImage imageNamed:_dataArray[rightImageIndex]];

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渠驼,一起剝皮案震驚了整個濱河市骑晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹋砚,老刑警劉巖偶妖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡拇涤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門誉结,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹅士,“玉大人,你說我怎么就攤上這事惩坑〉糁眩” “怎么了也拜?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趾痘。 經(jīng)常有香客問我慢哈,道長,這世上最難降的妖魔是什么扼脐? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任岸军,我火速辦了婚禮,結(jié)果婚禮上瓦侮,老公的妹妹穿的比我還像新娘艰赞。我一直安慰自己,他們只是感情好肚吏,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布方妖。 她就那樣靜靜地躺著,像睡著了一般罚攀。 火紅的嫁衣襯著肌膚如雪党觅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天斋泄,我揣著相機與錄音杯瞻,去河邊找鬼。 笑死炫掐,一個胖子當(dāng)著我的面吹牛魁莉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播募胃,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼旗唁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痹束?” 一聲冷哼從身側(cè)響起检疫,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祷嘶,沒想到半個月后屎媳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡论巍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年剿牺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片环壤。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡晒来,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郑现,到底是詐尸還是另有隱情湃崩,我是刑警寧澤荧降,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站攒读,受9級特大地震影響朵诫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜薄扁,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一剪返、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邓梅,春花似錦脱盲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匣距,卻和暖如春面哥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毅待。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工尚卫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尸红。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓吱涉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驶乾。 傳聞我的和親對象是個殘疾皇子显沈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容