You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.7 KiB

//
// JSToastDialogs.m
// tongxin
//
// Created by ecell on 2021/6/9.
// Copyright © 2021 xTT. All rights reserved.
//
#import "JSToastDialogs.h"
static int changeCount;
@implementation JSToastDialogs
// 实现声明单例方法 GCD
+ (instancetype)shareInstance {
static JSToastDialogs *singleton = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
singleton = [[JSToastDialogs alloc] init];
});
return singleton;
}
// 初始化方法
- (instancetype)init {
self = [super init];
if (self) {
dialogsLabel = [[DialogsLabel alloc]init];
countTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime) userInfo:nil repeats:YES];
countTimer.fireDate = [NSDate distantFuture];//关闭定时器
}
return self;
}
/**
* 弹出并显示JSToastDialogs
* @param message 显示的文本内容
* @param duration 显示时间
*/
- (void)makeToast:(NSString *)message duration:(CGFloat)duration{
if ([message length] == 0) {
return;
}
[dialogsLabel setMessageText:message];
[[[UIApplication sharedApplication] keyWindow] addSubview:dialogsLabel];
dialogsLabel.alpha = 0.8;
countTimer.fireDate = [NSDate distantPast];//开启定时器
changeCount = duration;
}
//定时器回调方法
- (void)changeTime {
if(changeCount-- <= 0){
countTimer.fireDate = [NSDate distantFuture]; //关闭定时器
[UIView animateWithDuration:0.2f animations:^{
dialogsLabel.alpha = 0;
} completion:^(BOOL finished) {
[dialogsLabel removeFromSuperview];
}];
}
}
@end
#pragma mark - DialogsLabel的方法
@implementation DialogsLabel
//DialogsLabel初始化,为label设置各种属性
- (instancetype)init {
self = [super init];
if (self) {
self.layer.cornerRadius = 8;
self.layer.masksToBounds = YES;
self.backgroundColor = [UIColor blackColor];
self.numberOfLines = 0;
self.textAlignment = NSTextAlignmentCenter;
self.textColor = [UIColor whiteColor];
self.font = [UIFont systemFontOfSize:15];
}
return self;
}
//设置显示的文字
- (void)setMessageText:(NSString *)text {
[self setText:text];
CGRect rect = [self.text boundingRectWithSize:CGSizeMake(ScreenWidth - 20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:self.font} context:nil];
CGFloat width = rect.size.width + 20;
CGFloat height = rect.size.height + 20;
CGFloat x = (ScreenWidth-width)/2;
CGFloat y = ScreenHeight-height - 120; // 59-->120
self.frame = CGRectMake(x, y, width, height);
}
@end