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.
210 lines
6.6 KiB
210 lines
6.6 KiB
// |
|
// TFPromptManager.m |
|
// TFReader |
|
// |
|
// Created by 谢腾飞 on 2020/12/10. |
|
// Copyright © 2020 xtfei_2011@126.com. All rights reserved. |
|
// |
|
|
|
#import "TFPromptManager.h" |
|
#import "TFReaderSettingHelper.h" |
|
#import "UIImage+Color.h" |
|
|
|
#define Alert_Duration 1.0f |
|
|
|
static TFPromptView *_promptView = nil; |
|
@implementation TFPromptManager |
|
|
|
static NSDictionary *_errorInfo; |
|
|
|
+ (void)showPromptWithError:(NSError *)error defaultText:(NSString * _Nullable)text |
|
{ |
|
_errorInfo = _errorInfo ?: [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ErrorCode" ofType:@"plist"]]; |
|
|
|
NSString *_text = _errorInfo[[NSString stringWithFormat:@"%zd", error.code]]; |
|
_text = _text ?: (error.localizedDescription ?: (text ?: TFLocalizedString(@"请求失败"))); |
|
|
|
[self showPromptViewWithStatus:TFPromptStatusError promptTitle:_text]; |
|
} |
|
|
|
+ (void)showPromptViewWithStatus:(TFPromptStatus)status promptTitle:(NSString *)promptTitle |
|
{ |
|
[self showPromptViewWithStatus:status promptTitle:promptTitle duration:Alert_Duration]; |
|
} |
|
|
|
+ (void)showLimitPromptViewWithStatus:(TFPromptStatus)status promptTitle:(NSString *)promptTitle |
|
{ |
|
[self showPromptViewWithStatus:status promptTitle:promptTitle duration:Alert_Duration]; |
|
} |
|
|
|
+ (void)showPromptViewWithStatus:(TFPromptStatus)status promptTitle:(NSString *)promptTitle duration:(CGFloat)duration |
|
{ |
|
[self showPromptViewWithStatus:status promptTitle:promptTitle duration:duration completionHandler:nil]; |
|
} |
|
|
|
+ (void)showPromptViewWithStatus:(TFPromptStatus)status promptTitle:(NSString *)promptTitle completionHandler:(TFPromptDissmissBlock)completionHandler |
|
{ |
|
[self showPromptViewWithStatus:status promptTitle:promptTitle duration:Alert_Duration completionHandler:completionHandler]; |
|
} |
|
|
|
+ (void)showPromptViewWithStatus:(TFPromptStatus)status promptTitle:(NSString *)promptTitle duration:(CGFloat)duration completionHandler:(TFPromptDissmissBlock)completionHandler |
|
{ |
|
if (!promptTitle || promptTitle.length == 0) { |
|
return; |
|
} |
|
|
|
if ([_promptView.promptTitle isEqualToString:promptTitle]) { |
|
return; |
|
} |
|
|
|
if (_promptView) { |
|
[_promptView hiddenPromptView]; |
|
} |
|
|
|
if (status == TFPromptStatusLoading) { |
|
duration = 30; |
|
} |
|
|
|
dispatch_async(dispatch_get_main_queue(), ^{ |
|
|
|
WS(weakSelf) |
|
_promptView = [[TFPromptView alloc] init]; |
|
_promptView.promptTitle = promptTitle; |
|
_promptView.promptStatus = status; |
|
_promptView.alertDuration = duration; |
|
_promptView.alertDissmissBlock = ^{ |
|
|
|
[weakSelf hiddenAlert]; |
|
if (completionHandler) { |
|
completionHandler(); |
|
} |
|
}; |
|
[_promptView showPromptView]; |
|
}); |
|
} |
|
|
|
static UIActivityIndicatorView *activityIndicator; |
|
UIView *maskView; |
|
|
|
+ (void)showPromptViewWithPromptMaskType:(TFPromptMaskType)type loadingStyle:(TFPromptStyle)style |
|
{ |
|
if (@available(iOS 13.0, *)) { |
|
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleLarge]; |
|
} else { |
|
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; |
|
} |
|
activityIndicator.center = [self currentWindow].center; |
|
|
|
// 设置动画颜色 |
|
switch (style) { |
|
case TFPromptStyleLight: { |
|
activityIndicator.color = [UIColor whiteColor]; |
|
} |
|
break; |
|
case TFPromptStyleDark: { |
|
activityIndicator.color = [UIColor darkGrayColor]; |
|
} |
|
break; |
|
} |
|
|
|
// 设置动画的蒙层 |
|
switch (type) { |
|
case TFPromptMaskTypeNone: { |
|
[[self currentWindow] addSubview:activityIndicator]; |
|
} |
|
break; |
|
case TFPromptMaskTypeBlack: |
|
case TFPromptMaskTypeClear: { |
|
maskView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; |
|
maskView.backgroundColor = type == TFPromptMaskTypeBlack ? [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5] : [UIColor clearColor]; |
|
[[self currentWindow] addSubview:maskView]; |
|
[[self currentWindow] addSubview:activityIndicator]; |
|
} |
|
break; |
|
} |
|
|
|
[activityIndicator startAnimating]; |
|
} |
|
|
|
+ (void)stopAnimating |
|
{ |
|
[activityIndicator stopAnimating]; |
|
|
|
if (maskView.superview) { |
|
[maskView removeFromSuperview]; |
|
maskView = nil; |
|
} |
|
} |
|
|
|
+ (void)hiddenAlert |
|
{ |
|
if (_promptView.isShowing) { |
|
[_promptView hiddenPromptView]; |
|
_promptView = nil; |
|
} |
|
} |
|
|
|
+ (UIWindow *)currentWindow |
|
{ |
|
if (__IPHONE_13_0) { |
|
return [UIApplication sharedApplication].windows.firstObject; |
|
} else { |
|
return [UIApplication sharedApplication].keyWindow; |
|
} |
|
} |
|
|
|
static UIView *_loadingView; |
|
+ (UIView *)showLoading:(UIView *)rootView |
|
{ |
|
UIView *mainView = [[UIView alloc] init]; |
|
_loadingView = mainView; |
|
mainView.backgroundColor = kColorRGBA(0, 0, 0, 0); |
|
|
|
if (rootView) { |
|
[rootView addSubview:mainView]; |
|
} else { |
|
[kMainWindow addSubview:mainView]; |
|
} |
|
|
|
[mainView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.edges.equalTo(mainView.superview); |
|
}]; |
|
|
|
NSMutableArray<YYImage *> *arr = [NSMutableArray array]; |
|
for (int i = 0; i < 47; i++) { |
|
YYImage *image = [YYImage imageNamed:[NSString stringWithFormat:@"%@%d", @"loading", i]]; |
|
image = [image imageWithColor:[[[TFReaderSettingHelper sharedManager] getReaderTextColor] colorWithAlphaComponent:0.75]]; |
|
[arr addObject:image]; |
|
} |
|
|
|
YYAnimatedImageView *loadingView = [[YYAnimatedImageView alloc] init]; |
|
loadingView.backgroundColor = [UIColor clearColor]; |
|
loadingView.animationImages = arr; |
|
loadingView.animationDuration = 2.0; |
|
[loadingView startAnimating]; |
|
[mainView addSubview:loadingView]; |
|
|
|
[loadingView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.center.equalTo(mainView); |
|
make.width.mas_equalTo(90); |
|
make.height.equalTo(loadingView.mas_width).multipliedBy(150.0 / 240.0); |
|
}]; |
|
|
|
__weak typeof(loadingView) weakView = loadingView; |
|
[NSTimer scheduledTimerWithTimeInterval:loadingView.animationDuration block:^(NSTimer * _Nonnull timer) { |
|
|
|
if (!weakView.superview) { |
|
[timer invalidate]; |
|
timer = nil; |
|
} |
|
NSArray *t_arr = [[loadingView.animationImages reverseObjectEnumerator] allObjects]; |
|
weakView.animationImages = t_arr; |
|
} repeats:YES]; |
|
return mainView; |
|
} |
|
|
|
+ (void)hideLoading |
|
{ |
|
[_loadingView removeFromSuperview]; |
|
} |
|
@end
|
|
|