项目中文字展示不全 老板要求文字在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