记录下UILabel中字体超出Label宽度时滚动显示
SHFontCycleLabel.h
//
// SHFontCycleLabel.h
// SHFontCycleLabel
//
// Created by HarrySun on 2017/4/21.
// Copyright © 2017年 Mobby. All rights reserved.
//
// 简书:http://www.jianshu.com/u/87c7aa9de064
// GitHub:https://github.com/272095249
//
#import <UIKit/UIKit.h>
@interface SHFontCycleLabel : UIView
@property (nonatomic, strong) UILabel *myLabel;
@property (nonatomic, copy) NSString *labelText;
@end
SHFontCycleLabel.m
//
// SHFontCycleLabel.m
// SHFontCycleLabel
//
// Created by HarrySun on 2017/4/21.
// Copyright © 2017年 Mobby. All rights reserved.
//
// 简书:http://www.jianshu.com/u/87c7aa9de064
// GitHub:https://github.com/272095249
//
#import "SHFontCycleLabel.h"
@interface SHFontCycleLabel ()
@property (nonatomic, strong) UILabel *secondLabel;
@property (nonatomic, strong) NSTimer *myTimer;
@end
@implementation SHFontCycleLabel
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self addSubview:self.myLabel];
self.layer.masksToBounds = YES;
}
return self;
}
- (void)setLabelText:(NSString *)labelText{
[self.myTimer invalidate];
self.myTimer = nil;
[self.secondLabel removeFromSuperview];
self.myLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
_labelText = labelText;
self.myLabel.text = _labelText;
CGRect rect = [_labelText boundingRectWithSize:CGSizeMake(10000, self.frame.size.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.myLabel.font} context:nil];
if (rect.size.width > self.frame.size.width) {
self.myLabel.frame = CGRectMake(0, 0, rect.size.width + 30, self.frame.size.height);
[self createSecondLabel];
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.025 target:self selector:@selector(startFontCycle) userInfo:nil repeats:YES];
}
}
- (void)startFontCycle{
self.myLabel.frame = CGRectMake(self.myLabel.frame.origin.x - 1, 0, self.myLabel.frame.size.width, self.myLabel.frame.size.height);
self.secondLabel.frame = CGRectMake(CGRectGetMaxX(self.myLabel.frame), 0, self.secondLabel.frame.size.width, self.secondLabel.frame.size.height);
if (CGRectGetMaxX(self.myLabel.frame) < 0) {
UILabel *tempLabel;
tempLabel = self.myLabel;
self.myLabel = self.secondLabel;
self.secondLabel = tempLabel;
}
}
- (void)createSecondLabel{
if (self.secondLabel) {
self.secondLabel = nil;
}
self.secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.myLabel.frame.size.width, 0, self.myLabel.frame.size.width, self.frame.size.height)];
self.secondLabel.text = self.myLabel.text;
[self addSubview:self.secondLabel];
}
- (UILabel *)myLabel{
if (!_myLabel) {
_myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
return _myLabel;
}
- (void)dealloc{
[self.myTimer invalidate];
self.myTimer = nil;
}
@end
SHFontCycleLabel使用
#import "SHFontCycleLabel.h"
SHFontCycleLabel *label = [[SHFontCycleLabel alloc]initWithFrame:CGRectMake(10, 100, 120, 40)];
[label setBackgroundColor:[UIColor yellowColor]];
label.labelText = @"测试Label滚动,测试Label滚动,测试Label滚动,测试Label滚动";
[self.view addSubview:label];