上次寫了一個關於左右滾動使用scroll實現的輪播,今天閑著沒事也搞了一個上下滾動的字型輪播,大致思路是一樣的。
如果想實現上下滾動的輪播,首先要確定幾點
1.scroll可見範圍(可滾動範圍)
2.contentSize(最大滾動範圍)
3.當然還有資料來源,和左右滾動類似,item+2 好了,確定了這幾點有了思路就可以直接來代碼了 聲明屬性
@property (strong, nonatomic) UIScrollView * verticalScroll;//承載資料的父視圖@property (strong, nonatomic) NSArray * titleArrays;//資料來源@property (strong, nonatomic) NSTimer * myTimer;//定時器管控輪播
資料來源(這裡對資料做了處理,數量+2)
-(NSArray *)titleArrays{ if (!_titleArrays) { _titleArrays = [NSArray arrayWithObjects:@"今天是一個好天氣",@"溫度達到了30度以上",@"可是我並沒有感覺很熱",@"因為什麼呢",@"公司開空調了",@"這個是不是可以有啊",@"今天是一個好天氣",@"溫度達到了30度以上", nil]; } return _titleArrays;}
父視圖包括資料的建立
-(UIScrollView *)verticalScroll{ if (!_verticalScroll) { _verticalScroll = [[UIScrollView alloc]init]; _verticalScroll.center = CGPointMake(SCREEN_WIDTH/2, SCREEN_HEIGHT/2); _verticalScroll.bounds = CGRectMake(0, 0, 130, 60); //_verticalScroll.pagingEnabled = YES; _verticalScroll.showsVerticalScrollIndicator = NO; _verticalScroll.scrollEnabled = NO; _verticalScroll.bounces = NO; _verticalScroll.delegate = self; [self.view addSubview:_verticalScroll]; CGFloat scaleH = 20; CGFloat Height = 20; CGFloat H = 0; for (int i =0; i<self.titleArrays.count; i++) { UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(10, H+scaleH, CGRectGetWidth(_verticalScroll.frame)-20, Height); [button setTitle:self.titleArrays[i] forState:UIControlStateNormal]; [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; button.tag = i+10; [_verticalScroll addSubview:button]; H = button.frame.origin.y+button.frame.size.height+scaleH; } _verticalScroll.contentSize = CGSizeMake(0, H); } return _verticalScroll;}
還差一個管控無限輪播的定時器(我是在進入介面的時候就建立的,可根據項目需求來)
-(void)viewWillAppear:(BOOL)animated{ self.verticalScroll.backgroundColor = [UIColor whiteColor]; _myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(changeScrollContentOffSetY) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:_myTimer forMode:NSRunLoopCommonModes];}
實現定時器方法
-(void)changeScrollContentOffSetY{ //啟動定時器 CGPoint point = self.verticalScroll.contentOffset; [self.verticalScroll setContentOffset:CGPointMake(0, point.y+CGRectGetHeight(self.verticalScroll.frame)) animated:YES];}
當然了,滾動代理也是要有的。因為這裡沒有考慮手動滑動可以滾動的情況,所以唯寫一個代理協議即可,代碼如下
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ NSLog(@"endani"); if (scrollView.contentOffset.y==scrollView.contentSize.height-CGRectGetHeight(self.verticalScroll.frame)){ [scrollView setContentOffset:CGPointMake(0, CGRectGetHeight(self.verticalScroll.frame))]; }}
最後定時器記得在退出本介面的時候記得銷毀
-(void)viewWillDisappear:(BOOL)animated{ [_myTimer invalidate]; _myTimer = nil;}
到此,一個上下字型無限滾動的輪播,就做成了。當然代碼的話寫的還是比較爛的,有不足地方請大家指出,我會及時更改。最後記錄本文僅供參考,Demo地址