美文网首页
iOS<文字轮播 >实现一个简陋的向上文字轮播

iOS<文字轮播 >实现一个简陋的向上文字轮播

作者: neobuger | 来源:发表于2018-08-09 21:34 被阅读11次

    先展示效果吧:

    LabelScroll.gif

    设计思路:

    1. 在自定义view上添加上、下两个label,两个label的高度都等于view的高度
    UILabel *up = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    [self addSubview:up];
    _upLabel = up;
    
    UILabel *down = [[UILabel alloc] initWithFrame:CGRectMake(0, self.frame.size.height, self.frame.size.width, self.frame.size.height)];
    [self addSubview:down];
    _downLabel = down;
    
    1. 同时向上移动,当上面的upLabel移出view同时,downLabel的frame正好等于父view的frame,此时将upLabel的frame修改为之前downLabel的frame,相当于upLabel和downLabel互换frame
    [UIView animateWithDuration:AniDuration animations:^{
            if (self.upLabelIsUP == YES) {
                self.upLabel.frame = CGRectMake(0, -self.frame.size.height, self.frame.size.width, self.frame.size.height);
                self.downLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
            }else {
                self.downLabel.frame = CGRectMake(0, -self.frame.size.height, self.frame.size.width, self.frame.size.height);
                self.upLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
            }
        } completion:^(BOOL finished) {
            //upLabel在downLabel上面
            if (self.upLabelIsUP == YES) {
                self.upLabel.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, self.frame.size.height);
                self.upLabelIsUP = NO;
            }else {
            //downLabel在upLabel上面
                self.downLabel.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, self.frame.size.height);
                self.upLabelIsUP = YES;
            }
        }];
    
    1. 设置label的文字
    - (void)setLabelTxt {
        //currentIndex为当前展示的数据源中的index 
        if (self.currentIndex == self.dataSource.count) {
            self.currentIndex = 0;
        }
        if (self.currentIndex % 2 == 0) {
            self.upLabel.text = [self.dataSource objectAtIndex:self.currentIndex];
        }else {
            self.downLabel.text = [self.dataSource objectAtIndex:self.currentIndex];
        }
        self.currentIndex ++;
    }
    
    1. 设置数据源, 由于只有2个label,所以上面设置label文字时候,用self.currentIndex % 2 == 0判断,会在dataSource的个数是奇数时出现问题,大家可以自己试试,想了下一个简单的方式就是当个数是奇数时,数据源*2,得到的就是偶数个了
    - (void)setDataSource:(NSMutableArray *)dataSource {
        _dataSource = dataSource;
        if (self.dataSource.count == 0) {
            return;
        }
        if (dataSource.count%2 == 1) {
            //个数为奇数时,乘以2,总个数就是偶数了,ojbk
            [dataSource addObjectsFromArray:dataSource];
        }
        
        [self setLabelTxt];
        [self setLabelTxt];
        [self addTimer];
    }
    

    5)还有定时器,等等一些小细节,都在代码里

    demo地址

    相关文章

      网友评论

          本文标题:iOS<文字轮播 >实现一个简陋的向上文字轮播

          本文链接:https://www.haomeiwen.com/subject/cmscbftx.html