94 lines
3.0 KiB
Objective-C
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
|