站在巨人的肩膀上开发
SDAutoLayout
Masonry
LEEAlert
借鉴此写法,用链式编程思想封装了 MBProgress 和 AFNetworking
Network - Demo
封装了 网络层 和 数据层
Network.netConfig
.url(@"url")
.params(@{@"" : @"参数"})
.body(@{@"" : @"参数需要放body的话"})
.downloadProgress(^(NSProgress * _Nonnull progress) {
// 下载进度
})
.uploadProgress(^(NSProgress * _Nonnull progress) {
// 上传进度
})
.netSuccessBlock(^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 网络成功
})
.netErrorBlock(^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 网络失败
})
.dataSuccessBlock(^(id _Nonnull data) {
// 数据解析成功
})
.dataErrorBlock(^(NSString * _Nonnull errCode, NSString * _Nonnull errmsg) {
// 数据解析失败
})
.getRequest();
MBProgress
使用方式
// 展示纯文字
HUD.instance.ShowText(@"text");
// 展示loading
HUD.instance.ShowLoading();
// 自定义
HUD.instance
.BackgroundColor(RGBA(0, 0, 0, 0.55))
.TipDuration(2.5)
.Radius(0)
.ContentInset(13)
.HalfCorner(true)
.ShowText(@"每日任务\n观看15s,+35金豆 \n每日三次");
就不传demo了 -- .h
//
// HUD.h
// InfrastructureProjects
//
// Created by shiwei on 2018/4/23.
// Copyright © 2018 shiwei. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@class HUD;
NS_ASSUME_NONNULL_BEGIN
typedef HUD * _Nonnull (^HUDToVoid) (void);
typedef HUD * _Nonnull (^HUDToString) (NSString *text);
typedef HUD * _Nonnull (^HUDToFloat) (CGFloat duration);
typedef HUD * _Nonnull (^HUDToColor) (UIColor *backgroundColor);
typedef HUD * _Nonnull (^HUDToColor) (UIColor *tinkColor);
typedef HUD * _Nonnull (^HUDToView) (UIView *view);
typedef HUD * _Nonnull (^HUDToBoolean) (Boolean halfCorner);
@interface HUD : NSObject
/// 提示时间 默认 1.5
@property (nonatomic, copy, readonly) HUDToFloat TipDuration;
/// 等待时间 默认 0 一直持续 需要手动关闭
@property (nonatomic, copy, readonly) HUDToFloat LoadingDuration;
@property (nonatomic, copy, readonly) HUDToView ToView;
/// 圆角
@property (nonatomic, copy, readonly) HUDToFloat Radius;
/// 内边距
@property (nonatomic, copy, readonly) HUDToFloat ContentInset;
/// 是否为半角, 为True时 `Radius` 属性失效
@property (nonatomic, copy, readonly) HUDToBoolean HalfCorner;
/// 风格颜色
@property (nonatomic, copy, readonly) HUDToColor TinkColor;
/// 背景颜色
@property (nonatomic, copy, readonly) HUDToColor BackgroundColor;
@property (nonatomic, copy, readonly) HUDToString ShowSuccess;
@property (nonatomic, copy, readonly) HUDToString ShowError;
@property (nonatomic, copy, readonly) HUDToVoid ShowLoading;
@property (nonatomic, copy, readonly) HUDToString ShowText;
@property (nonatomic, copy, readonly) HUDToString ShowTextLoading;
@property (nonatomic, copy, readonly) HUDToVoid ShowCustomLoading;
+ (instancetype)instance;
+ (void)hide;
@end
NS_ASSUME_NONNULL_END
.m
//
// HUD.m
// InfrastructureProjects
//
// Created by shiwei on 2018/4/23.
// Copyright © 2018 shiwei. All rights reserved.
//
#import "HUD.h"
#import <MBProgressHUD/MBProgressHUD.h>
@interface HUD ()
@property (nonatomic, assign) CGFloat tipDuration;
@property (nonatomic, assign) CGFloat loadingDuration;
@property (nonatomic, strong) UIColor *tinkColor;
@property (nonatomic, strong) UIColor *backgroundColor;
@property (nonatomic, assign) CGFloat radius;
@property (nonatomic, assign) CGFloat contentInset;
@property (nonatomic, assign) Boolean halfCorner;
@property (nonatomic, weak) UIView *view;
@end
@implementation HUD
static MBProgressHUD *_hud;
+ (instancetype)instance {
return [[HUD alloc] _init];
}
- (instancetype)_init
{
self = [super init];
if (self) {
self.tipDuration = 1.5;
self.loadingDuration = 0;
self.view = [HUD windowView];
self.tinkColor = UIColor.whiteColor;
self.backgroundColor = UIColor.blackColor;
self.radius = 0;
}
return self;
}
+ (UIView *)windowView {
NSArray * arr = [UIApplication sharedApplication].windows;
if (arr.count == 1) {
return arr.lastObject;
} else {
UIWindow *win = arr.firstObject;
for (UIWindow *window in arr) {
if ([window isMemberOfClass:[UIWindow class]]) {
win = window;
}
}
return win;
}
}
- (HUDToFloat)TipDuration {
return ^(CGFloat duration) {
self.tipDuration = duration;
return self;
};
}
- (HUDToFloat)LoadingDuration {
return ^(CGFloat duration) {
self.loadingDuration = duration;
return self;
};
}
- (HUDToView)ToView {
return ^(UIView *view) {
self.view = view;
return self;
};
}
- (HUDToFloat)Radius {
return ^(CGFloat radius) {
self.radius = radius;
return self;
};
}
- (HUDToFloat)ContentInset {
return ^(CGFloat value) {
self.contentInset = value;
return self;
};
}
- (HUDToColor)BackgroundColor {
return ^(UIColor *color) {
self.backgroundColor = color;
return self;
};
}
- (HUDToColor)TinkColor {
return ^(UIColor *color) {
self.tinkColor = color;
return self;
};
}
- (HUDToBoolean)HalfCorner {
return ^(Boolean value) {
self.halfCorner = value;
return self;
};
}
- (HUDToString)ShowSuccess {
return ^(NSString *success) {
[self show:success icon:@"HUD_success" toView:self.view afterDelay:self.tipDuration];
return self;
};
}
- (HUDToString)ShowError {
return ^(NSString *error) {
[self show:error icon:@"HUD_error" toView:self.view afterDelay:self.tipDuration];
return self;
};
}
- (HUDToString)ShowText {
return ^(NSString *text) {
[self show:text icon:nil toView:self.view afterDelay:self.tipDuration];
return self;
};
}
- (void)show:(NSString *)text icon:(NSString *)icon toView:(UIView *)view afterDelay:(CGFloat)duration {
// __weak typeof(self) wself = self;
dispatch_async(dispatch_get_main_queue(), ^{
// __strong typeof(self) self = wself;
// 快速显示一个提示信息
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
hud.label.text = text;
// 判断是否显示图片
if (icon == nil) {
hud.mode = MBProgressHUDModeText;
hud.label.numberOfLines = 0;
}else{
// 设置图片
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"MBProgressHUD.bundle/%@", icon]];
img = img == nil ? [UIImage imageNamed:icon] : img;
hud.customView = [[UIImageView alloc] initWithImage:img];
// 再设置模式
hud.mode = MBProgressHUDModeCustomView;
}
// 隐藏时候从父控件中移除
hud.removeFromSuperViewOnHide = YES;
hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor;
hud.bezelView.color = self.backgroundColor ? self.backgroundColor : UIColor.blackColor;
hud.contentColor = self.tinkColor ? self.tinkColor : UIColor.whiteColor;
if (self.radius > 0) {
hud.bezelView.layer.cornerRadius = self.radius;
}
if (self.contentInset > 0) {
hud.margin = self.contentInset;
}
if (self.halfCorner) {
[[hud rac_signalForSelector:@selector(layoutSubviews)] subscribeNext:^(RACTuple * _Nullable x) {
[hud.superview layoutSubviews];
hud.bezelView.layer.cornerRadius = ceil(hud.bezelView.bounds.size.height / 2.f);
}];
}
// 指定时间之后再消失
[hud hideAnimated:true afterDelay:duration];
});
}
- (HUDToVoid)ShowLoading {
return ^() {
[self showNormalLoadingWithText:@""];
return self;
};
}
- (HUDToString)ShowTextLoading {
return ^(NSString *text) {
[self showNormalLoadingWithText:text];
return self;
};
}
- (void)showNormalLoadingWithText:(NSString *)text {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.label.text = text;
// 再设置模式
hud.mode = MBProgressHUDModeIndeterminate;
hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor;hud.bezelView.color = self.backgroundColor ? self.backgroundColor : UIColor.blackColor;
hud.contentColor = self.tinkColor ? self.tinkColor : UIColor.whiteColor;
if (self.radius > 0) {
hud.bezelView.layer.cornerRadius = self.radius;
}
if (self.contentInset > 0) {
hud.margin = self.contentInset;
}
if (self.halfCorner) {
[[hud rac_signalForSelector:@selector(layoutSubviews)] subscribeNext:^(RACTuple * _Nullable x) {
[hud.superview layoutSubviews];
hud.bezelView.layer.cornerRadius = ceil(hud.bezelView.bounds.size.height / 2.f);
}];
}
if (self.loadingDuration) {
[hud hideAnimated:true afterDelay:self.loadingDuration];
} else {
if (_hud) {
[_hud hideAnimated:true];
}
_hud = hud;
}
}
- (HUDToVoid)ShowCustomLoading {
return ^() {
[self showHTJLoading];
return self;
};
}
- (void)showHTJLoading {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor;
hud.bezelView.backgroundColor = UIColor.blackColor;
hud.contentColor = UIColor.whiteColor;
hud.square = YES;
hud.bezelView.color = [UIColor clearColor];
hud.mode = MBProgressHUDModeCustomView;
UIImage *image = [UIImage imageNamed:@"frame_00"];
UIImageView *animateGifView = [[UIImageView alloc]initWithImage:image];
NSMutableArray *gifArray = [NSMutableArray array];
for (int i = 0; i <= 46; i ++) {
UIImage *images = [UIImage imageNamed:[NSString stringWithFormat:@"frame_%02d",i]];
if (images) {
UIImage *temp = [HUD scaleToSize:images size:CGSizeMake(50, 50)];
[gifArray addObject:temp];
}
}
[animateGifView setAnimationImages:gifArray];
[animateGifView setAnimationDuration:2.5];
[animateGifView setAnimationRepeatCount:0];
[animateGifView startAnimating];
hud.customView = animateGifView;
if (self.loadingDuration) {
[hud hideAnimated:true afterDelay:self.loadingDuration];
} else {
if (_hud) {
[_hud hideAnimated:true];
}
_hud = hud;
}
}
+ (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)newsize{
// 创建一个bitmap的context
// 并把它设置成为当前正在使用的context
//原图片尺寸是150*150 当裁剪时会被压缩 所以改成3倍(50*50) 不然图片会不清晰
UIGraphicsBeginImageContextWithOptions(newsize, NO, 3.0);
// 绘制改变大小的图片
[img drawInRect:CGRectMake(0, 0, newsize.width, newsize.height)];
// 从当前context中创建一个改变大小后的图片
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
// 返回新的改变大小后的图片
return scaledImage;
}
+ (void)hide {
[_hud hideAnimated:true];
}
@end
网友评论