iOS开发(OC)——文字滚动效果

来源:互联网 发布:php注入 编辑:程序博客网 时间:2024/06/04 23:36

我们在浏览网页或者在使用一些娱乐新闻类的App的时候,会经常看到标题如果过长的话,会有一个滚动的效果,那么这种效果是怎样实现的呢?我在这里为大家介绍两种方法:

  1. 利用时间器,在一定的时间间隔内,不断地向后截取,并且每次截取的长度是相同的。
    1.1首先定义几个全局变量
@property (nonatomic,strong)UILabel *titleLabel;@property (nonatomic,strong)NSString *titleString;@property (nonatomic,assign)int fromLocation;//字符串截取的开始位置

1.2为文字字符串赋值

_titleString=@"我们在浏览网页或者在使用一些娱乐新闻类的App的时候,会经常看到标题如果过长的话,会有一个滚动的效果,那么这种效果是怎样实现的呢?";

1.3定义控件label

_titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(20, 100, 200, 21)];    [self.view addSubview:_titleLabel];

1.4设置初始位置

_fromLocation=0;

1.5创建时间器

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(labelScroll) userInfo:nil repeats:YES];

1.6时间器方法代码

-(void)labelScroll{    if(_titleString.length>10){//假设字符长度超过10则进行滚动        if(_fromLocation+10<=_titleString.length){//保证截取的范围不超过原有字符串长度,否则会越界崩溃            NSString *tempString=_titleString;//创建一个临时变量字符串            _titleLabel.text=[tempString substringWithRange:NSMakeRange(_fromLocation, 10)];        }else{//超出范围后,把字符串截取的开始位置重置为0,重新从头滚动            _fromLocation=0;            NSString *tempString=_titleString;//创建一个临时变量字符串            _titleLabel.text=[tempString substringWithRange:NSMakeRange(_fromLocation, 10)];        }    }else{        _titleLabel.text=_titleString;    }    _fromLocation++;//位置向后移动一位}
  1. 上面那种方法看起来可能会有一种卡顿的效果,下面这种方法是利用系统提供的动画API写的,能实现平滑滚动。此方法已经封装好,只要传入创建的label和label的长度即可
+(void)startAnimationIfNeededWithLabel:(UILabel *)label andLabelWidth:(CGFloat)width{    //取消、停止所有的动画    [label.layer removeAllAnimations];    CGSize textSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];//获取赋值后的label的size    CGRect lframe = label.frame;    lframe.size.width = textSize.width;    label.frame = lframe;    if (textSize.width > width) {//文字长度大于label长度        float offset = textSize.width;//滚动的长度,大家可以试着改动这个值,寻找适合自己的效果        [UIView animateWithDuration:10.0 delay:1.0 options:UIViewAnimationOptionRepeat //动画重复         |UIViewAnimationOptionTransitionFlipFromRight //动画从左到右         |UIViewAnimationOptionCurveLinear //动画的时间曲线,线性可实现平滑滚动                         animations:^{                             label.transform = CGAffineTransformMakeTranslation(-offset, 0);                         }                         completion:^(BOOL finished) {                         }         ];    }}
1 0
原创粉丝点击