用处:为了解决文字过长显示不全的鸡肋,进行如led屏的轮播机制,进行轮播,将所有文字展现出来。
DCTextCircleLabel是我封装的文字轮播器,直接加载到view 上面使用即可。
DCTextCircleLabel.h文件里
#import <UIKit/UIKit.h>
@interface DCTextCircleLabel : UIView
/** 显示的文字 */
@property (nonatomic, copy) NSString *titleText;
@end
DCTextCircleLabel.m文件里
#import "DCTextCircleLabel.h"
#import "NSString+Extension.h"
#import "UIView+Extension.h"
#define size [self.titleText sizeWithFont:[UIFont systemFontOfSize:15] maxW:MAXFLOAT]
@interface DCTextCircleLabel()
@property (nonatomic, weak) UILabel *preTitleLabel;
@property (nonatomic, weak) UILabel *nextTitleLabel;
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation DCTextCircleLabel
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
UILabel *preTitleLabel = [[UILabel alloc] init];
preTitleLabel.backgroundColor = [UIColor blackColor];
preTitleLabel.textColor = [UIColor whiteColor];
preTitleLabel.font = [UIFont systemFontOfSize:15];
preTitleLabel.textColor = [UIColor whiteColor];
preTitleLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:preTitleLabel];
self.preTitleLabel = preTitleLabel;
UILabel *nextTitleLabel = [[UILabel alloc] init];
nextTitleLabel.backgroundColor = [UIColor blackColor];
nextTitleLabel.textColor = [UIColor whiteColor];
nextTitleLabel.font = [UIFont systemFontOfSize:15];
nextTitleLabel.textColor = [UIColor whiteColor];
nextTitleLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:nextTitleLabel];
self.nextTitleLabel = nextTitleLabel;
NSLog(@"initWithFrame");
}
return self;
}
- (void)setTitleText:(NSString *)titleText {
_titleText = [titleText copy];
self.preTitleLabel.text = titleText;
self.nextTitleLabel.text = titleText;
NSLog(@"setTitleText");
}
- (void)layoutSubviews {
[super layoutSubviews];
if (size.width > self.width) {
self.preTitleLabel.x = 0;
self.preTitleLabel.y = 0;
self.preTitleLabel.width = size.width;
self.preTitleLabel.height = self.height;
self.nextTitleLabel.x = size.width;
self.nextTitleLabel.y = 0;
self.nextTitleLabel.width = size.width;
self.nextTitleLabel.height = self.height;
[self addTimer];
}else {
self.preTitleLabel.centerX = self.centerX;
self.preTitleLabel.y = 0;
self.preTitleLabel.width = size.width;
self.preTitleLabel.height = self.height;
self.nextTitleLabel.x = 0;
self.nextTitleLabel.y = 0;
self.nextTitleLabel.width = 0;
self.nextTitleLabel.height = 0;
}
NSLog(@"layoutSubviews");
}
// 添加定时器
- (void)addTimer {
_timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(beginRun) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
}
- (void)removeTimer {
if (_timer) {
[_timer invalidate];
_timer = nil;
}
}
- (void)dealloc {
[self removeTimer];
}
// 下一页
- (void)beginRun{
// pre = 0 next =420
// pre = -420 next = 0 -> pre = 420,next = 0
// pre == 0 next = -420 -> pre = 0, next = 420
if (self.preTitleLabel.x > - self.preTitleLabel.width) {
self.preTitleLabel.x --;
}else if (self.preTitleLabel.x == - self.preTitleLabel.width){
self.preTitleLabel.x = size.width;
}
if (self.nextTitleLabel.x > - self.nextTitleLabel.width) {
self.nextTitleLabel.x --;
}else if (self.nextTitleLabel.x == - self.nextTitleLabel.width){
self.nextTitleLabel.x = size.width;
}
[self setNeedsDisplay];
}
NSString+Extension
UIView+Extension
源代码下载地址:https://github.com/DaiYongTao/TextCircle
别忘记支持一下哦。多谢。