上下滾動輪播的實現

上次寫了一個關于左右滾動使用scroll實現的輪播,今天閑著沒事也搞了一個上下滾動的字體輪播,大致思路是一樣的。

亦菲表演機器貓

圖片發自簡書App
如果想實現上下滾動的輪播,首先要確定幾點

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地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容