前言
花里胡哨的UI,设计了花里胡哨的界面,然后我们苦逼的程序员就要去实现。
跑马灯效果有N多种实现,有通过动画实现的,有通过NSTimer实现的,我用的方法是NSTimer。
原理:
如下图,view显示信息的界面,label1和label2分别是要展示的内容,当label1离开屏幕是放到label2后面。如此反复。

-(void)createSubViews{
self.layer.masksToBounds = YES;
[self.viewsArr removeAllObjects];
CGFloat h = self.frame.size.height;
if (self.textArr.count == 1) {
NSString *text = self.textArr.firstObject;
CGFloat w = [self getElementWidthWithText:text];
self.label1.frame = CGRectMake(0, 0, w, h);
self.label1.text = text;
self.label2.frame = CGRectMake(w, 0, w, h);
self.label2.text = text;
self.label1.tag = self.label1.tag = 0;
[self.viewsArr addObject:self.label1];
[self.viewsArr addObject:self.label2];
}else if (self.textArr.count > 1){
CGFloat w1 = 0;
CGFloat w2 = 0;
for (int i = 0; i<self.textArr.count; i++) {
w1 = [self getElementWidthWithText:self.textArr[I]];
UILabel *lab = [[UILabel alloc] init];
lab.frame = CGRectMake(w2, 0, w1, h);
lab.text = self.textArr[I];
lab.tag = I;
[self.viewsArr addObject:lab];
w2 = w1;
}
UILabel *lab = self.viewsArr.firstObject;
self.label1.frame = lab.frame;
self.label1.text = lab.text;
self.label1.tag = lab.tag;
UILabel *lab2 = self.viewsArr[1];
self.label2.frame = lab2.frame;
self.label2.text = lab2.text;
self.label2.tag = lab2.tag;
}
self.label3 = self.label1;
self.label1.font = self.font;
self.label2.font = self.font;
}
下载地址
demo
网友评论