miduo_client/Assets/Plugins/iOS/ThinkingSDK/Source/common/TDToastView.m

94 lines
3.0 KiB
Objective-C

#import "TDToastView.h"
@implementation TDToastView
{
UITextView *_textView;
}
#define TOAST_HORIZONTAL_PADDING 20.0
#define TOAST_VERTICAL_PADDING 15.0
- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
_textView = [[UITextView alloc] initWithFrame:CGRectZero];
_textView.opaque = NO;
_textView.editable = NO;
_textView.selectable = NO;
_textView.textColor = [UIColor whiteColor];
_textView.backgroundColor = [UIColor clearColor];
_textView.userInteractionEnabled = YES;
[self addSubview:_textView];
self.alpha = 0.9;
self.backgroundColor = [UIColor darkGrayColor];
self.layer.cornerRadius = 20.0;
self.opaque = NO;
self.userInteractionEnabled = YES;
[self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_tapHandler:)]];
}
return self;
}
+ (instancetype)showInWindow:(UIWindow *)window text:(NSString *)text duration:(NSTimeInterval)duration {
TDToastView *toast = [[self alloc] initWithFrame:CGRectZero];
toast.text = text;
[toast showInWindow:window duration:duration];
return toast;
}
- (void)showInWindow:(UIWindow *)window duration:(NSTimeInterval)duration {
CGRect windowBounds = CGRectInset(window.bounds, 20.0, 20.0);
CGRect toastBounds = CGRectZero;
toastBounds.size = [self sizeThatFits:windowBounds.size];
self.bounds = toastBounds;
self.center = CGPointMake(CGRectGetMidX(windowBounds), CGRectGetMidY(windowBounds));
CGFloat alpha = self.alpha;
self.alpha = 0.0;
[window addSubview:self];
[UIView animateWithDuration:0.3 animations:^{
self.alpha = alpha;
} completion:^(BOOL finishedShowing) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self dismiss];
});
}];
}
- (NSString *)text {
return _textView.text;
}
- (void)setText:(NSString *)text {
_textView.text = text;
}
- (void)dismiss {
if (!self.superview) {
return;
}
[UIView animateWithDuration:0.3 animations:^{
self.alpha = 0.0;
} completion:^(BOOL finishedHiding) {
[self removeFromSuperview];
}];
}
- (void)_tapHandler:(UITapGestureRecognizer *)tapGestureRecognizer {
[self dismiss];
}
- (void)layoutSubviews {
[super layoutSubviews];
_textView.frame = CGRectInset(self.bounds, TOAST_HORIZONTAL_PADDING, TOAST_VERTICAL_PADDING);
}
- (CGSize)sizeThatFits:(CGSize)size {
CGSize textConstrainedSize = CGSizeMake(size.width - 2 * TOAST_HORIZONTAL_PADDING,
size.height - 2 * TOAST_VERTICAL_PADDING);
CGSize textSize = [_textView sizeThatFits:textConstrainedSize];
CGFloat width = MIN(size.width, textSize.width + 2 * TOAST_HORIZONTAL_PADDING);
CGFloat height = MIN(size.height, textSize.height + 2 * TOAST_VERTICAL_PADDING);
return CGSizeMake(width, height);
}
@end