文字滚动视图

       项目中文字展示不全 老板要求文字在label上滚动 查了很多资料 最后找到李明杰老师的一个demo 封装的很好 我就在他的基础上 根据自己的需求 封装了一个方法 需要的时候可以直接调用 次方法支持左右滚动 可以调节速度 支持连续滚动 间断滚动 往返滚动 可以更改滚动的的起始位置

   效果图如下


具体实现原理其实就是判断文字的长度是否大于你定义的view的长度 如果字体长度超过展示的viwe的长度 就创建两个label  如果字体长度小于文字长度 就创建一个label  再加上定时器

#pragma mark - 创建滚动视图

- (void)startScroll{

if (_text.length == 0) {

return;

}

//初始化滚动字符串label

switch (_currentScrollModel) {

case ZLHTextScrollContinuous:

if (_textWidth > self.frame.size.width) {

if(_currentMoveDirection == ZLHTextScrollMoveLeft){

[self creatLabel1AndLabel2WithFrame:CGRectMake(0, 0, _textWidth, self.frame.size.height) frame2:CGRectMake(_textWidth, 0, _textWidth, self.frame.size.height)];

}else{

[self creatLabel1AndLabel2WithFrame:CGRectMake(self.frame.size.width-_textWidth,0, _textWidth, self.frame.size.height) frame2:CGRectMake(self.frame.size.width-_textWidth-_textWidth, 0, _textWidth, self.frame.size.height)];

}

}else{//如果字符串的长度小于控件宽度,只创建一个字符串label

if (_currentMoveDirection == ZLHTextScrollMoveLeft) {

[self creatLabel1WithFrame:CGRectMake(0, 0, _textWidth, self.frame.size.height)];

}else{

[self creatLabel1WithFrame:CGRectMake(self.frame.size.width-_textWidth, 0, _textWidth, self.frame.size.height)];

}

}break;

case ZLHTextScrollIntermitent:

{

if (_currentMoveDirection == ZLHTextScrollMoveLeft) {

[self creatLabel1WithFrame:CGRectMake(0, 0, _textWidth, self.frame.size.height)];

}else{

[self creatLabel1WithFrame:CGRectMake(self.frame.size.width - _textWidth, 0,_textWidth, self.frame.size.height)];

}

}break;

case ZLHTextScrollFromOutside:

{

if (_currentMoveDirection == ZLHTextScrollMoveLeft) {

[self creatLabel1WithFrame:CGRectMake(self.frame.size.width, 0, _textWidth, self.frame.size.height)];

}else{

[self creatLabel1WithFrame:CGRectMake(_textWidth, 0, _textWidth, self.frame.size.height)];

}

}break;

case ZLHTextScrollWanering:

{

[self creatLabel1WithFrame:CGRectMake(0, 0, _textWidth, self.frame.size.height)];

} break;

default:

break;

}

//设置速度,开始滚动 (默认为0.03)

[self setMoveSpeed:0.03];

}

在.h文件中 

/**

字符创滚动前端的起始位置

*/

typedef enum {

ZLHTextScrollContinuous,  //从控件内开始连续滚动

ZLHTextScrollIntermitent, //从控件内开始间断滚动

ZLHTextScrollFromOutside, //从控件外开始滚动

ZLHTextScrollWanering,    //从控件中往返滚动 (不受设置方向的影响)

}ZLHTextScrollMode;

/**

字符串移动方向

*/

typedef enum {

ZLHTextScrollMoveLeft,

ZLHTextScrollMoveRight

}ZLHTextScrollMoveDirection;

@interface ZLHScrollTextView : UIView

/**

*进行控件的初始化

* @param frame 控件的frame

* @param scrollModel 字符串的滚动模式

* @Param moveDirection 字符串的滚动方向

*/

- (id)initWithFrame:(CGRect)frame textScrollModel:(ZLHTextScrollMode)scrollModel direction:(ZLHTextScrollMoveDirection)moveDirection;

/**

* 更改滚动的字符串

* @param text 字符串的内容

* @param color 字符串的颜色

* @param font 字符串的字体

*/

-(void)startScrollWithText:(NSString *)text textColor:(UIColor *)color font:(UIFont *)font;

/**

* 设置字符串的移动速度

* @param speed 移动速度 取值越小速度越快 取值范围:0.001~0.1

*/

-(void)setMoveSpeed:(CGFloat)speed;

具体实现方法我就不一一说了 可以查看demo

demo地址为: https://git.oschina.net/huanni/scrolltextView.git

你可能感兴趣的:(文字滚动视图)