.h文件
/**
* 跑马灯效果
*/
@interface LXMarquee : UIView
{
UILabel *marquee;//跑马灯label
}
@property (nonatomic, retain) UILabel *marquee;
- (instancetype)initWithFrame:(CGRect)frame;
- (void)setMarqueeDo;
@end
.m文件
@implementation LXMarquee
@synthesize marquee;
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
marquee = [[UILabel alloc]initWithFrame:self.bounds];
[self addSubview:marquee];
CGRect f = marquee.frame;
f.origin.x = frame.size.width;
marquee.frame = f;
self.layer.masksToBounds = YES;
/**
* 或者使用下面一句
*/
// [self setClipsToBounds:YES];
}
return self;
}
- (void)setMarqueeDo {
CGFloat fontSize = marquee.font.pointSize;//获取font的fontSize
NSInteger length = marquee.text.length;
CGRect rect = self.frame;
if (length * fontSize > rect.size.width) {//判断文字长度超过view的frame
[marquee sizeToFit];
[UIView beginAnimations:@"testAnimation" context:NULL];
[UIView setAnimationDuration:8.8f];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDelegate:self];
[UIView setAnimationRepeatAutoreverses:NO];
[UIView setAnimationRepeatCount:999999];
CGRect frame = marquee.frame;
frame.origin.x = -frame.size.width;
marquee.frame = frame;
[UIView commitAnimations];
}
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end
实现部分
LXMarquee *label = [[LXMarquee alloc]initWithFrame:CGRectMake(0, 0, 100, 44)];
label.marquee.text = @"跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯跑马灯";
[label setMarqueeDo];
[self.view addSubview:label];