美文网首页
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