Files
featherVoice/QXLive/Third/TFPopup/TFPopupToast.m
2026-01-27 19:10:51 +08:00

148 lines
4.3 KiB
Objective-C
Executable File

//
// TFPopupToast.m
// TFPopupDemo
//
// Created by ztf on 2019/1/14.
// Copyright © 2019年 ztf. All rights reserved.
//
#import "TFPopupToast.h"
#import "UIView+TFPopup.h"
@interface TFPopupToast ()<TFPopupDelegate>
@property(nonatomic,assign)CGRect inViewFrame;
@property(nonatomic, copy)NSString *msg;
@property(nonatomic, copy)TFPopupToastBlock cusBlock;
@end
@implementation TFPopupToast
-(void)dealloc{
#if DEBUG
NSLog(@"****** TFPopupToast(已释放) msg:%@ ******",self.msg);
#endif
}
+(void)tf_show:(UIView *)inView msg:(NSString *)msg animationType:(TFAnimationType)animationType{
[TFPopupToast tf_show:inView
msg:msg
offset:CGPointZero
dissmissDuration:0
animationType:animationType
customBlock:nil];
}
+(void)tf_show:(UIView *)inView
msg:(NSString *)msg
offset:(CGPoint)offset
dissmissDuration:(NSTimeInterval)duration
animationType:(TFAnimationType)animationType
customBlock:(TFPopupToastBlock)customBlock{
if (inView == nil) {NSLog(@"****** %@ %@ ******",[self class],@"inView 不能为空!");return;}
if (msg == nil) {NSLog(@"****** %@ %@ ******",[self class],@"msg 不能为空!");return;}
TFPopupParam *param = [TFPopupParam new];
param.disuseBackground = YES;
param.offset = offset;
if (duration == 0) {
param.autoDissmissDuration = [TFPopupToast toastDuration:msg];
}else{
param.autoDissmissDuration = duration;
}
TFPopupToast *toast = [[TFPopupToast alloc]initWithFrame:CGRectZero];
toast.inViewFrame = inView.bounds;
toast.msg = msg;
toast.cusBlock = customBlock;
switch (animationType) {
case TFAnimationTypeFade:
[toast tf_showNormal:inView popupParam:param];
break;
case TFAnimationTypeScale:
[toast tf_showScale:inView offset:CGPointZero popupParam:param];
break;
default:
break;
}
}
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.layer.cornerRadius = 6;
self.layer.masksToBounds = YES;
self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.7];
self.userInteractionEnabled = NO;
[self addSubview:self.msgLabel];
}
return self;
}
-(void)setMsg:(NSString *)msg{
_msg = [msg copy];
self.frame = [self toastFrame];
self.msgLabel.frame = [self toastLabelFrame];
self.msgLabel.text = msg;
}
+(NSTimeInterval)toastDuration:(NSString *)msg{
NSTimeInterval dur = 0;
if ([msg isKindOfClass:[NSString class]] && msg.length > 10) {
dur = (msg.length - 10) / 10 + 1.5;
if (dur > 5) {
dur = 5;
}
}else{
dur = 1.5;
}
return dur;
}
-(CGRect)toastFrame{
CGRect frame = self.inViewFrame;
CGSize constrantSize = CGSizeMake(frame.size.width - 60, frame.size.height - 60);
NSDictionary *attr = @{NSFontAttributeName:self.msgLabel.font};
NSString *msg = [NSString stringWithFormat:@" %@ ",self.msg];
CGSize size = [msg boundingRectWithSize:constrantSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attr
context:nil].size;
size = CGSizeMake(size.width + 30, size.height + 30);
size = CGSizeMake(size.width < 60.0?60.0:size.width, size.height < 40.0?40.0:size.height);
CGFloat x = 15 + (frame.size.width - 30 - size.width) * 0.5;
CGFloat y = 15 + (frame.size.height - 30 - size.height) * 0.5;
CGRect fr = CGRectMake(x ,y ,size.width ,size.height);
return fr;
}
-(CGRect)toastLabelFrame{
CGRect fr = CGRectMake(15, 15,self.frame.size.width - 15 * 2,self.frame.size.height - 15 * 2);
return fr;
}
-(UILabel *)msgLabel{
if (_msgLabel == nil) {
_msgLabel = [[UILabel alloc]initWithFrame:CGRectZero];
_msgLabel.textColor = [UIColor whiteColor];
_msgLabel.font = [UIFont systemFontOfSize:13];
_msgLabel.textAlignment = NSTextAlignmentCenter;
_msgLabel.backgroundColor = [UIColor clearColor];
_msgLabel.numberOfLines = 0;
_msgLabel.lineBreakMode = NSLineBreakByClipping;
_msgLabel.clipsToBounds = NO;
}
return _msgLabel;
}
@end