// // 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 *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