iOS 上下滾動輪播的實現

來源:互聯網
上載者:User
上次寫了一個關於左右滾動使用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地址
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.