- CPX_BaseLib
ios端组件化开发基本库,所有项目需依赖。(本库只是针对项目作出常用的功能封装以及基本适配处理,有些类可以根据不同项目不同需求再次封装)
传送门:gitHub 链接
基本规范
为了项目的规范,所以我们在开发的时候需要统一一些方法的命名及方法的使用
1. 初始化方法
* - (void)initUI;/**UI初始话*/
* -(void)initDataSource; /**数据源初始话*/
* - (void)loadData;/**加载数据*/
2. 初始化方法第二级,默认放在initUI下
* - (void)initViews;/**初始化View*/
* - (void)initNavigation;/**初始化导航栏*/
* - (void)initOtherViews;/**初始化其他view*/
3.命名以驼峰原则,以功能名字命名,见名思意,并配上注释。
组成部件
- BaseClass
- Configration
- Categories
- Extensions
- NetworkManager
- ThirdPart
- Utls
BaseClass
CPXBaseAlertView 用于自定义弹窗的所有父类
基本使用方法 创建一个View继承CPXBaseAlertView 使用时调用
-(void)show:(BOOL)animate 即可
常用属性 removeOnTouchOutside (点击空白区域是否关闭弹窗)
CPXBaseTableView 用于自定义UITableView的所有父类
初始化方式 [CPXBaseTableView new] 内部已经处理不同系统版本适配问题
CPXBaseView 用于所有自定义视图的父类
-(CPXBaseViewController*)getViewcontrollerView获取当前的父控制器
BaseVC
一 CPXBaseNavigationController 基类UINavigationController控制器(此类中处理了app因为导航栏的侧滑出现假死的情况以及实现了各种代理方法,所以所有的导航栏必须继承此类)
二 CPXBaseTabBarController 基类UITabBarController控制器(此类是留的一个入口,以便自定义tabBar的时候做一些相应的处理)
三 CPXBaseViewController 用于自定义控制器的所有父类
1.规范了UI以及data的初始化方法,以及处理了导航栏的统一设置,并留了处理状态栏颜色的api。
2.初始化了一个继承于CPXBaseTableView的tableiview,用于快速创建tableview并为以后的
3.初始化了数据源的一些变量:
@property (nonatomic,strong)NSMutableArray * dataArray;/**<所有带有列表的页面全部使用该数据项*/
@property (nonatomic,assign)BOOL isDownRefresh;/**< 是否是下拉刷新 默认NO*/
@property (nonatomic,assign)int page;/**<分页 默认为0*/
@property (nonatomic,assign)int pageSize;/**<每个分页的数据量长度*/
@property(nonatomic,strong)CPXNetworkManagerModel *netConfigmodel;/**<网络请求配置model*/
4.导航栏的处理:
导航栏返回按钮 - (void)initLeftBackNaviButton
导航栏顶部透明色 - (void)initDefaultNavigation
BaseModel
CPXBaseModel 所有自定义Model的父类
Configration
GlobalDefine.h 常用的一些占位图与通用展示文字宏文件
GlobalPCH.pch 用于引入BaseLib库
Import.h 用于导入创建的自定义类、CateGory、Exrension、第三方工具类
IphoneXConfig.h 用于iPhone机型的UI适配
SystemConfig.h 系统版本适配、启动宏、各类通知相关
UIConfig.h 全局UI配置 颜色设置、app view通用背景颜色、navigationBar颜色、APP主题色等
Categories
UIBarButtonItem+Badge.h
用于UIBarButtonItem的角标设置(常用属性如下:)
@property (nonatomic) UIColor *badgeBGColor;/**< 背景色*/
@property (nonatomic) UIColor *badgeTextColor;/**< 字体颜色*/
@property (nonatomic) UIFont *badgeFont;/**< 字体*/
@property (nonatomic) CGFloat badgePadding;/**< 间隔*/
@property (nonatomic) CGFloat badgeMinSize;/**< 最小size*/
@property (nonatomic) CGFloat badgeOriginX;/**< x偏移*/
@property (nonatomic) CGFloat badgeOriginY;/**<y偏移 */
UIImage+Color.h
用于color转image、image转color、调整图片方向、图片无损压缩、压缩图片到指定文件大小(kb)、将图片裁剪到制定像素、传入需要的占位图尺寸 获取占位图
+ (UIImage *)cpx_imageWithColor:(UIColor *)color;/**< color转image*/
+ (UIColor *)cpx_imageTocolor:(UIImage *)image withrect:(CGRect)rect; /**< image转color*/
+ (UIImage*)cpx_fixOrientation:(UIImage*)aImage; /**< UIImagePickerController返回的照片带有方向信息,如果直接上传到服务器的话,可能造成旋转了90°(当手机竖直拍照)的情况。而且如果直接取其jpeg数据,或者将UIImage保存到本地的话,就会丢失这个方向信息,导致下一次读取出来图片就是颠倒的*/
+ cpx_reSizeImageData:(UIImage *)sourceImage
maxImageSize:(CGFloat)maxImageSize
maxSizeWithKB:(CGFloat) maxSize;/**< 图片无损压缩 */
+(NSData *)cpx_compressOriginalImage:(UIImage *)image
toMaxDataSizeKBytes:(CGFloat)size; /**<压缩图片到指定文件大小(kb)*/
+ (UIImage*)cpx_imageByScalingAndCroppingForImage:(UIImage *)sourceImage Size:(CGSize)targetSize; /**< 将图片裁剪到制定像素 */
+ (UIImage *)cpx_placeholderImageWithSize:(CGSize)size ImageSize:(CGSize )imageSize; /**< 获取不同尺寸的占位图*/
NSDictionary+Basic.h 用于处理不安全字典(null,@“” 等的处理)
+(NSDictionary*)cpx_safeDictionaryByObject:(id)unsaveObj;
NSDictionary+log.h
用于控制台打印中文(因为网络请求的数据在控制台显示出来是UTF-8格式,只需导入该头文件即可打印中文信息)
UIScrollView+Basic.h 用于处理取消scrollview刷新、添加头部刷新(自动处理网络请求配置model,关闭菊花的开关以及打开是手动刷新)、添加尾部刷新(自动处理网络请求配置model,关闭菊花的开关以及打开是手动刷新)
-(void)cpx_endRefresh; /**< 取消一切刷新(包括上拉下拉)*/、
-(void)cpx_addHeaderRefresh:(MJRefreshComponentRefreshingBlock)refreshingBlock withModel:(CPXNetworkManagerModel*)netModel; /**< 添加头部刷新(自动处理网络请求配置model,关闭菊花的开关以及打开是手动刷新)*/
-(void)cpx_addFooterRefresh:(MJRefreshComponentRefreshingBlock)refreshingBlock withModel:(CPXNetworkManagerModel*)netModel; /**< 添加尾部刷新(自动处理网络请求配置model,关闭菊花的开关以及打开是手动刷新)*/
UIButton+Badge.h 用于UIButton的角标设置
用于UIBarButtonItem的角标设置(常用属性如下:)
@property (nonatomic) UIColor *badgeBGColor;/**< 背景色*/
@property (nonatomic) UIColor *badgeTextColor;/**< 字体颜色*/
@property (nonatomic) UIFont *badgeFont;/**< 字体*/
@property (nonatomic) CGFloat badgePadding;/**< 间隔*/
@property (nonatomic) CGFloat badgeMinSize;/**< 最小size*/
@property (nonatomic) CGFloat badgeOriginX;/**< x偏移*/
@property (nonatomic) CGFloat badgeOriginY;/**<y偏移 */
UIButton+ImageTitleSpacing.h 用于设置button的titleLabel和imageView的布局样式,及间距
其中包括了四种样式
MKButtonEdgeInsetsStyleTop, // image在上,label在下
MKButtonEdgeInsetsStyleLeft, // image在左,label在右
MKButtonEdgeInsetsStyleBottom, // image在下,label在上
MKButtonEdgeInsetsStyleRight // image在右,label在左
- (void)cpx_layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style imageTitleSpace:(CGFloat)space;
UIButton+touch.h 用于处理按钮的暴力点击事件(防止过快重复点击多次触发点击事件,默认0.5秒间隔时间)
@property (nonatomic, assign) NSTimeInterval timeInterval;/**设置点击时间间隔*/
@property (nonatomic, assign) BOOL isIgnore;/** 用于设置单个按钮不需要被hook*/
UIButton+TimerFire.h 用于展示倒计时按钮(获取验证码按钮)
-(void)fireForTimerWithTimeCount:(NSInteger)count; /**开始倒计时 */
-(void)setBorderColorAndTitleColor;/**设置按钮边框颜色和圆角、title */
UIView+AZGradient.h 一句代码实现View渐变色
- (void)az_setGradientBackgroundWithColors:(NSArray<UIColor *> *_Nullable)colors locations:(NSArray<NSNumber *> *_Nullable)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint
UIView+Basic.h 主要是高效处理view的圆角以及渐变色问题(响应的layer也添加了对应的api)
/** 渐变色方向
- GradientDirectionHorizontal: 水品方向
- GradientDirectionVertical: 垂直方向
*/
typedef NS_ENUM(NSInteger,GradientDirection) {
GradientDirectionHorizontal = 0,
GradientDirectionVertical
};
-(UIImage *)cpx_screenShotViewWith:(CGRect)rect;/**对屏幕进行截屏 */
- (BOOL)cpx_isDisplayedInScreen;/** 判断view是否在屏幕上 */
-(void)cpx_addPathCorner:(UIRectCorner)corner cornerRadis:(CGFloat)cornerRadis;/**添加贝塞尔圆角--自动布局必须完成布局才能调用 */
-(void)cpx_setCorner:(CGFloat)cornerRadis;/**普通方式切圆角 */
- (void)cpx_roundedCornerWithRadius:(CGFloat)radius cornerColor:(UIColor *)color;/**绘制一个带背景色的圆角 */
- (void)cpx_roundedCornerWithRadius:(CGFloat)radius cornerColor:(UIColor *)color corners:(UIRectCorner)corners;/**绘制一个带背景色的圆角 ,并可以自己选择圆角的位置*/
- (void)cpx_roundedCornerWithCornerRadii:(CGSize)cornerRadii cornerColor:(UIColor *)color corners:(UIRectCorner)corners borderColor:(UIColor *)borderColor borderWidth:(CGFloat)borderWidth;/** 设置一个带边框的圆角,并可设置边框颜色和宽度,以及圆角背景和位置*/
-(void)cpx_addGradientColorWithColor_begin:(UIColor * )color_begin colorEnd:(UIColor * )color_end gradientDirection:(GradientDirection)direction;/** 添加渐变色 --- 添加backgourdcolor的形式*/
UIView+GetController.h 用于获取view的所在的controller、获取view所在UITableViewCell、根据点击的视图 、获取当前indexPath
-(UIViewController * )cpx_getSuperControllerOfTheView;/** 获取view的所在的controller*/
-(UITableViewCell * )cpx_getSuperContainerCell;/**获取view所在UITableViewCell */
- (NSIndexPath *)cpx_indexPathInTable:(UITableView *)tableView; /** 根据点击的视图 、获取当前indexPath*/
UIView+Storyboard.h 用于给xib和SB增加额外的属性:边界颜色、边界宽度、圆角
@property (nonatomic) IBInspectable UIColor *borderColor;//边界颜色
@property (nonatomic) IBInspectable CGFloat borderWidth;//边界宽度
@property (nonatomic) IBInspectable CGFloat cornerRadius;//圆角
UIBarButtonItem+SXCreate.h 处理自定义导航栏按钮带来的偏移以及点击范围等问题*
+(UIBarButtonItem *)cpx_itemWithTarget:(id)target
action:(SEL)action
image:(UIImage *)image;/** 根据图片生成UIBarButtonItem*/
+(UIBarButtonItem *)cpx_itemWithTarget:(id)target
action:(SEL)action
nomalImage:(UIImage *)nomalImage
higeLightedImage:(UIImage *)higeLightedImage
imageEdgeInsets:(UIEdgeInsets)imageEdgeInsets; /** 根据图片与文字生成UIBarButtonItem*/
+(UIBarButtonItem *)cpx_itemWithTarget:(id)target
action:(SEL)action
title:(NSString *)title
titleEdgeInsets:(UIEdgeInsets)titleEdgeInsets ;/** 根据文字生成UIBarButtonItem*/
+(UIBarButtonItem *)cpx_fixedSpaceWithWidth:(CGFloat)width; /**用作修正位置的UIBarButtonItem */
CPXBaseNavigationController+Smoonth.h 用于处理平滑处理导航栏侧滑渐变效果(其中给UIViewController添加了两个属性,便于快速设置导航栏透明度以及颜色)
@property (nonatomic, assign) CGFloat navBarBgAlpha;//设置导航栏透明度
@property (nonatomic, strong) UIColor *navBarTintColor;//导航栏背景色
UITextView+Placeholder.h 用于为UITextView增加 paceHoder属性(同样适用于xib以及storyboard)
@property (nonatomic, readonly) UILabel *placeholderLabel; /** 只读属性*/
@property (nonatomic, strong) IBInspectable NSString*placeholder;/** 适用于xib以及storyboard */
@property (nonatomic, strong) NSAttributedString *attributedPlaceholder; /** 富文本格式的占位 */
@property (nonatomic, strong) IBInspectable UIColor *placeholderColor;/** 适用于xib以及storyboard */
UILabel+init.h 用于UILabel的快速创建方式
+(UILabel *)cpx_LabelWithTextNoFrameText:(NSString *)text backgroundColor:(UIColor *)backgroundColor font:(UIFont *)font textColor:(UIColor *)textColor textAlignment:(NSTextAlignment)textAlignment;/** 快速创建UILabel */
+(UILabel *)cpx_LabelWithTextNoFrameText:(NSString *)text textColor:(UIColor *)textColor backgroundColor:(UIColor *)backgroundColor font:(UIFont *)font textAlignment:(NSTextAlignment)textAlignment;/** 快速创建UILabel */
+(UILabel *)cpx_LabelWithText:(NSString *)text textColor:(UIColor *)textColor backgroundColor:(UIColor *)backgroundColor frame:(CGRect)frame font:(UIFont *)font textAlignment:(NSTextAlignment)textAlignment;/** 快速创建UILabel */
UIImageView+Basic.h 用于异步加载图片(对sdwebImage的二次封装)
- (void)cpx_downloadImage:(NSString *)urlStr; /**异步加载图片(默认占位图) */
- (void)cpx_downloadImage:(NSString *)urlStr placeholder:(NSString *)imageName;/** 异步加载图片(手动设置占位图) */
- (void)cpx_downloadImage:(NSString *)urlStr placeholderImage:(UIImage *)image;/** 异步加载图片(手动设置占位图) */
-(void)cpx_downloadImage:(NSString *)urlStr placeholderSize:(CGSize)imageSize;/** 异步加载图片(手动设置占位图,并可设置占位图大小) */
NSString+AttributedString.h 用于富文本的处理(快速添加富文本属性)
-(NSAttributedString*)underLineStyleSingle;/** 添加下划线*/
-(NSMutableAttributedString*)centerLineStyleSingle; /**添加中划线 */
NSString+Basic.h 用于不安全的字符串转换为安全字符串、获取字符串的size、字典转字json符串、数组转json字符串、json字符串转数组等
+(NSString*)cpx_safetyStringByObject:(id)unsafeObj; /** 不安全的字符串转换为安全字符串 */
- (CGSize)cpx_sizeWithFont:(UIFont *)font
maxSize:(CGSize)maxSize;/**获取字符串的宽高 */
- (CGSize)cpx_sizeWithFontSize:(CGFloat )fontSize
maxSize:(CGSize)maxSize; /**获取字符串的宽高 */
+ (NSString*)cpx_stringWithJsonDictionary:(NSDictionary *)dic; /** 字典转字json符串 */
+ (NSString *)cpx_StringWithArray:(NSArray *)array; /** 数组转json字符串 */
+ (NSDictionary *)cpx_dictionaryWithJsonString:(NSString *)jsonString;/** json字符串转数组 */
+ (NSArray*)cpx_arrayWithJsonString:(NSString*)jsonString;/** json字符串转数组*/
- (NSString *)cpx_pinyin;/** 汉字的拼音 */
-(NSAttributedString*)cpx_underLineStyleSingle;/** 生成带有下划线的富文本*/
-(NSMutableAttributedString*)cpx_centerLineStyleSingle;/**生成带有中划线的富文本 */
+(NSString * )cpx_americaMoneyFormatter:(NSNumber * )number; /** 美国千分位数字*/
+(NSString *)cpx_urlEncode:(NSString * )url_origin; /** 图片urlEncode */
NSString+STRegex.h 用于正则表达式相关处理
- (BOOL)cpx_isValidEmail; /** 邮箱验证 */
- (BOOL)cpx_isValidPhoneNum;/** 手机号码验证 */
- (BOOL)cpx_isValidCarNo;/** 车牌号验证 */
- (BOOL)cpx_isValidUrl;/** 网址验证 */
- (BOOL)cpx_isValidPostalcode;/** 邮政编码 */
- (BOOL)cpx_isValidChinese;/** 纯汉字 */
- (BOOL)cpx_isValidIP; /** 是否符合IP格式,xxx.xxx.xxx.xxx */
- (BOOL)cpx_isValidIdCardNum; /** 身份证验证 refer to http://blog.csdn.net/afyzgh/article/details/16965107*/ */
- (BOOL)cpx_isValidWithMinLenth:(NSInteger)minLenth
maxLenth:(NSInteger)maxLenth
containChinese:(BOOL)containChinese
firstCannotBeDigtal:(BOOL)firstCannotBeDigtal;/** 是否符合最小长度、最长长度,是否包含中文,首字母是否可以为数字 */
- (BOOL)cpx_isValidWithMinLenth:(NSInteger)minLenth
maxLenth:(NSInteger)maxLenth
containChinese:(BOOL)containChinese
containDigtal:(BOOL)containDigtal
containLetter:(BOOL)containLetter
containOtherCharacter:(NSString *)containOtherCharacter
firstCannotBeDigtal:(BOOL)firstCannotBeDigtal;/** 是否符合最小长度、最长长度,是否包含中文,数字,字母,其他字符,首字母是否可以为数字 */
- (NSString *)cpx_stringByTrimmingBlank;/** 去掉两端空格和换行符 */
- (NSString *)cpx_removeHtmlFormat;/** 去掉html格式 */
- (BOOL)cpx_isValidTaxNo;/** 工商税号 */
- (BOOL)cpx_isIncludingEmoji;/** 判断是否包含emoji */
NSString+timer.h 用于时间与字符串之间的相互转换之间的处理
typedef enum {
timeStampTypeYMDHMS = 0, //年月日时分秒
timeStampTypeYMD, //年月日
timeStampTypeHMS, //时分秒
timeStampTypeHM //时
} timeStampType;
+ (NSString *)cpx_timeWithTimeIntervalString:(NSString *)timeString;/** 时间戳转时间 */
+ (NSString *)cpx_getTimeWithTimeIntervalStr:(NSString *)timeStampStr timeStampType:(timeStampType)timeStampType;/** 时间戳转时间(自定义样式) */
+ (NSString *)cpx_timeToTurnTheTimestamp;/** 当前日期转时间戳(日期NSDate 转 时间戳NSString) */
+(NSString *)cpx_getCureentTime; /** 获取当前时间字符串 */
+ (NSTimeInterval)cpx_getCurrentTimeValue;/** 获取当前时间字符串 */
+(NSString *)cpx_getCureentTimeWithFormatter:(timeStampType)timeStampType; /** 获取当前时间字符串(需传入时间样式) */
+(NSString *)cpx_turnTheTimestampString:(NSString*) timeStr;/** 日期字符串转时间戳(NSString转时间戳NSString*/
+(NSMutableArray *)cpx_caculateDiffreceMonthFromDate:(NSString *)fromDate;/** 计算两个日期的相差月数,并返回中间间隔的月份 */
+(NSString *)cpx_getYestodayDate;/** 获取昨天的日期 */
+(NSString *)cpx_timeStrChangeWithTime:(NSInteger)timeNum;/** //将时间(s)转换成时间戳(MM:ss) */
NSArray+Basic.h 处理不安全数组
NSArray+log.h 用于控制台打印中文(因为网络请求的数据在控制台显示出来是UTF-8格式,只需导入该头文件即可打印中文信息)
NSObject+Basic.h 数据持久化(单列存储)
-(void)cpx_saveValue:(NSString*)key Value:(id)value;/** 存储值 */
-(id)cpx_getValue:(NSString*)key;/** 取值 */
-(void)cpx_setBoolValue:(BOOL)value forKey:(NSString *)key;/** 存储布尔值*/
Extensions
UIViewExt.h 用于调取UIView的坐标
@property CGPoint origin; /** 位置 */
@property CGSize size; /** 大小 */
@property (readonly) CGPoint bottomLeft; /**坐下 */
@property (readonly) CGPoint bottomRight; /** 右下*/
@property (readonly) CGPoint topRight; /** 右上*/
@property CGFloat height; /** 高 */
@property CGFloat width; /** 宽 */
@property CGFloat top; /** 上 */
@property CGFloat left; /** 左 */
@property CGFloat bottom; /**下 */
@property CGFloat right; /** 右 */
@property (nonatomic, assign) CGFloat centerX;/**中心X */
@property (nonatomic, assign) CGFloat centerY;/** 中心Y */
- (void) moveBy: (CGPoint) delta;/** 移动*/
- (void) scaleBy: (CGFloat) scaleFactor;/** 缩放 */
- (void) fitInSize: (CGSize) aSize;/** 适应 */
- (UIView *)gridViewsCustom:(NSArray *)views inColumn:(NSInteger)column size:(CGSize)cellSize margin:(UIEdgeInsets)margin inRect:(CGRect)rect;/** */
ColorEx.h用于扩展颜色的功能
///******************颜色与16进制RGB的转化*******************//
- (NSString *) stringFromColor; /**将颜色转化为rgb的字符串 */
+ (UIColor *) colorWithString: (NSString *) stringToConvert; /** 将rgb的字符串转为颜色*/
- (NSString *) hexStringFromColor; /** 将16进制颜色转换为rgb字符串 */
+ (UIColor *) colorWithHexStringBeta: (NSString *) stringToConvert;/** 将16进制字符串转为颜色 */
+ (UInt32) RGBWithString: (NSString *) stringToRGB;/** 将rgb字符串转为UInt 32 rgb */
+ (UIColor *) colorWithHexString: (NSString *) stringToConvert;/** 将16进制字符串转为color */
HJCornerRadius.h 用于高效设置imageView的圆角,避免maskTobounds
@property (nonatomic, assign) CGFloat aliCornerRadius;/** 圆角数 */
NetworkManager(核心类)
在这个类中,我们对网络请求进行了很多封装以应对不同场景不同需求。(其中body数据传输、网络缓存、文件上传下载、断点传输,都进行了封装,一句代码轻松实现功能)
CPXNetCofig.h 网络层宏文件(用于配置网络请求的各种参数及宏)
CPXNetworkCache.h 网络层数据缓存类(存储方式:Cache)
这个类是主要是对YYCache的二次封装,实现了异步缓存数据,不仅用于网络请求,也可以用于其他数据的存储。(注意:不能直接对Model数据进行缓存,必须对model进行转化)
+ (void)setHttpCache:(id)httpData URL:(NSString *)URL parameters:(id)parameters; /**异步缓存网络数据,根据请求的 URL与parameters,做KEY存储数据, 这样就能缓存多级页面的数据 */
+ (void)setHttpCache:(id)httpData Key:(NSString *)Key; /**异步缓存数据,不局限与网络请求数据 */
+ (id)httpCacheForURL:(NSString *)URL parameters:(id)parameters; /**根据请求的 URL与parameters 同步取出缓存数据 */
+ (id)httpCacheForKey:(NSString *)Key;/**同步取出缓存数据,不局限与网络请求数据 */
+ (void)removeHttpDataForURL:(NSString *)URL parameters:(id)parameters;/** 删除对应的网络请求缓存数据*/
+ (void)removeHttpDataForKey:(NSString *)key;/** 删除对应key的缓存数据*/
+ (NSInteger)getAllHttpCacheSize; /** 获取缓存的大小bytes(字节) */
+ (void)removeAllHttpCache; /** 删除所有缓存,清空缓存 */
CPXNetworkManagerModel.h 此Model用于进行网络请求前的各种配置,以便应对各种需求,具体用法请看参数说明
typedef NS_ENUM(NSInteger, CPXNetWorkReliability) {
//如果没有发送成功,再次请求
CPXNetWorkReliabilityRetry = 0,
//必须要成功的请求,如果不成功就存入DB,然后再网络好的情况下继续发送,参照微信发消息
//需要注意,这类请求是不需要回调的
//类似于发微信成功与否
//必定成功,只要有网的情况下必定成功
CPXNetWorkReliabilityStoreToDB,
//普通请求,成不成功不影响业务,不需要重新发送
//类似统计、后台拉取本地已有的配置之类的请求
CPXNetWorkReliabilityNormal
};
/**
网络请求方式
- CPXRequestMethodGET: GET
- CPXRequestMethodPOST: POS
- CPXRequestMethodPUT: PUT
- CPXRequestMethodPATCH :PATCH
- CPXRequestMethodDELETE: DELETE
*/
typedef NS_ENUM(NSInteger, CPXRequestMethod) {
CPXRequestMethodGET = 0,
CPXRequestMethodPOST,
CPXRequestMethodPUT,
CPXRequestMethodPATCH,
CPXRequestMethodDELETE
}
//网络请求Fail的展示
typedef NS_ENUM(NSInteger, RequestErrorShowStyle) {
ErrorShowNone = 0, //无
ErrorShowWithHub, //展示hub
ErrorShowWithEmptyConfig, //展示占位图
}; //网络请求失败展示效果
/// 网络状态的Block
typedef void(^CPXNetworkMethodType)(CPXRequestMethod status);
@property (nonatomic, copy) NSString *urlStr; /** 请求的url(必传) */
@property (nonatomic, copy) NSDictionary *params; /** 请求参数(可不传) */
@property(nonatomic,strong)NSDictionary *bodyDic; /** 用于body网络请求传参数 */
@property (nonatomic, assign) BOOL isCache; /** 缓存开关 YES:打开开关 NO:关闭开关(默认关闭) */
@property (nonatomic, assign) int expirationTime; /** 缓存过期时间 有网默认600秒 无网30天 */
@property (nonatomic, assign) CPXNetWorkReliability reliability; /** 请求重复策略,默认重发(暂时没用) */
@property (nonatomic, assign) int retryCount; /**网络请求超时时间 */
@property (nonatomic,assign) CGFloat retryDelay; /** 每次retry之间的间隔时间(默认0.1秒) */
@property (nonatomic, assign) CPXRequestMethod requestMethod; /** 请求方式(默认get) */
@property (nonatomic,assign) BOOL isShowHub; /** 是否展示菊花(默认为NO) */
@property (nonatomic,strong) UIView *showView; /** 菊花展示的view(配合IsShowHub使用,默认为window) */
@property (nonatomic,strong) UIScrollView *ScrollView; /** 传入一个继承于scrollView(tableview和collectionView都可以),用来关闭上拉下拉刷新 */
@property (nonatomic,assign) BOOL isFreshing;/** 判断是否为手动刷新数据(如果是手动刷新数据就不用判断时间是否过期 : YES代表手动刷新数据) */
@property(nonatomic,assign)BOOL showNetworkActivityIndicator; /** 是否展示状态栏小菊花(默认打开) */
@property(nonatomic,assign)RequestErrorShowStyle errorStyle; /** 网络请求错误的展示方式 */
@property(nonatomic,assign)BOOL showCodeMsg; /** 是否展示错误信息信息 */
@property(nonatomic,assign)BOOL isCancelRequest; /** 是否取消当前网络请求 */
CPXBaseNetworkManager.h Base网络请求Manger(主要处理一些试图交互逻辑的处理),继承于CPXNetworkManager
/**
不带缓存的网络请求
@param model 网络请求配置model
@param success 成功的回调
@param failure 失败的回调
*/
+ (void)CPXBaseRequestWithNetworkModel:(CPXNetworkManagerModel *)model
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
带缓存的网络请求
@param model 网络请求配置model
@param responseCache 缓存的回调
@param success 成功的回调
@param failure 失败的回调
*/
+ (void)CPXBaseRequestWithNetworkModel:(CPXNetworkManagerModel *)model
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
CPXNetworkManager.h 网络请求,主要处理缓存以及过期问题。对各种请求方法的整合,继承于CPXNetworkHelper
CPXNetworkHelper.h 用于封装AFN
/**
有网YES, 无网:NO
@return BOOL
*/
+ (BOOL)isNetwork;
/**
手机网络:YES, 反之:NO
@return BOOL
*/
+ (BOOL)isWWANNetwork;
/**
WiFi网络:YES, 反之:NO
@return BOOL
*/
+ (BOOL)isWiFiNetwork;
/**
取消所有HTTP请求
*/
+ (void)cancelAllRequest;
/**
实时获取网络状态,通过Block回调实时获取(此方法可多次调用)
@param networkStatus 网络类型枚举值
*/
+ (void)networkStatusWithBlock:(CPXNetworkStatus)networkStatus;
/**
取消指定URL的HTTP请求
@param URL 指定的URL
*/
+ (void)cancelRequestWithURL:(NSString *)URL;
/**
开启日志打印 (Debug级别)
*/
+ (void)openLog;
/**
关闭日志打印,默认打开
*/
+ (void)closeLog;
/**
* GET请求,无缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)GET:(NSString *)URL
parameters:(id)parameters
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
* GET请求,自动缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param responseCache 缓存数据的回调
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)GET:(NSString *)URL
parameters:(id)parameters
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
* PUT请求,自动缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param responseCache 缓存数据的回调
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)PUT:(NSString *)URL
parameters:(id)parameters
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
* PATCH请求,自动缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param responseCache 缓存数据的回调
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)PATCH:(NSString *)URL
parameters:(id)parameters
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
* POST请求,自动缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param responseCache 缓存数据的回调
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)POST:(NSString *)URL
parameters:(id)parameters
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/*** DELETE请求,自动缓存
@param URL 请求地址
@param parameters 请求参数
@param responseCache 缓存的回调
@param success 请求成功的回调
@param failure 请求失败的回调
@return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)DELETE:(NSString *)URL
parameters:(id)parameters
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/** 上传文件
*
* @param URL 请求地址
* @param parameters 请求参数
* @param name 文件对应服务器上的
* @param filePath 文件本地的沙盒路径
* @param progress 上传进度信息
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)uploadFileWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
filePath:(NSString *)filePath
progress:(CPXHttpProgress)progress
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
* 上传单/多张图片
*
* @param URL 请求地址
* @param parameters 请求参数
* @param name 图片对应服务器上的字段
* @param images 图片数组
* @param fileNames 图片文件名数组, 可以为nil, 数组内的文件名默认为当前日期时间"yyyyMMddHHmmss"
* @param imageScale 图片文件压缩比 范围 (0.f ~ 1.f)
* @param imageType 图片文件的类型,例:png、jpg(默认类型)....
* @param progress 上传进度信息
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)uploadImagesWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
images:(NSArray<UIImage *> *)images
fileNames:(NSArray<NSString *> *)fileNames
imageScale:(CGFloat)imageScale
imageType:(NSString *)imageType
progress:(CPXHttpProgress)progress
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
* 下载文件(不支持断点下载)
*
* @param URL 请求地址
* @param fileDir 文件存储目录(默认存储目录为Download)
* @param progress 文件下载的进度信息
* @param success 下载成功的回调(回调参数filePath:文件的路径)
* @param failure 下载失败的回调
*
* @return 返回NSURLSessionDownloadTask实例,可用于暂停继续,暂停调用suspend方法,开始下载调用resume方法
*/
+ (__kindof NSURLSessionTask *)downloadWithURL:(NSString *)URL
fileDir:(NSString *)fileDir
progress:(CPXHttpProgress)progress
success:(void(^)(NSString *filePath))success
failure:(CPXHttpRequestFailed)failure;
/**
Description * 下载文件(支持断点下载)
@param urlHost 请求地址
@param progress 文件下载的进度信息
@param fileDir 文件存储目录(默认存储目录为Download)
@param success 下载成功的回调(回调参数filePath:文件的路径)
@param failure 下载失败的回调
@return 返回NSURLSessionDownloadTask实例,可用于暂停继续,暂停调用suspend方法,开始下载调用resume方法
*/
+ (__kindof NSURLSessionTask *)AFDownLoadFileWithUrl:(NSString*)urlHost
progress:(DowningProgress)progress
fileDir:(NSString *)fileDir
success:(DonwLoadSuccessBlock)success
failure:(DownLoadfailBlock)failure;
/**
用body传参数的网络请求
@param URL url
@param parameters 参数
@param body body(字典格式,方法里面自动转换)
@param requetMetod 请求方式(POST,GET)
@param responseCache 缓存
@param success 成功的回调
@param failure 失败的回调
*/
+(void )HTTPBody:(NSString *)URL
prams:(id)parameters
body:(id)body
requestMethod:(NSString*)requetMetod
responseCache:(CPXHttpRequestCache)responseCache
success:(CPXHttpRequestSuccess)success
failure:(CPXHttpRequestFailed)failure;
/**
在开发中,如果以下的设置方式不满足项目的需求,就调用此方法获取AFHTTPSessionManager实例进行自定义设置
(注意: 调用此方法时在要导入AFNetworking.h头文件,否则可能会报找不到AFHTTPSessionManager的❌)
@param sessionManager AFHTTPSessionManager的实例
*/
+ (void)setAFHTTPSessionManagerProperty:(void(^)(AFHTTPSessionManager *sessionManager))sessionManager;
/**
* 设置网络请求参数的格式:默认为二进制格式
*
* @param requestSerializer PPRequestSerializerJSON(JSON格式),PPRequestSerializerHTTP(二进制格式),
*/
+ (void)setRequestSerializer:(CPXRequestSerializer)requestSerializer;
/**
* 设置服务器响应数据格式:默认为JSON格式
*
* @param responseSerializer PPResponseSerializerJSON(JSON格式),PPResponseSerializerHTTP(二进制格式)
*/
+ (void)setResponseSerializer:(CPXResponseSerializer)responseSerializer;
/**
* 设置请求超时时间
*
* @param time 时长
*/
+ (void)setRequestTimeoutInterval:(NSTimeInterval)time;
/// 设置请求头
+ (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
/**
* 是否打开网络状态转圈菊花:默认打开
*
* @param open YES(打开), NO(关闭)
*/
+ (void)openNetworkActivityIndicator:(BOOL)open;
/**
配置自建证书的Https请求, 参考链接: http://blog.csdn.net/syg90178aw/article/details/52839103
@param cerPath 自建Https证书的路径
@param validatesDomainName 是否需要验证域名,默认为 YES. 如果证书的域名与请求的域名不一致,需设置为NO; 即服 务器使用其他可信任机构颁发
的证书,也可以建立连接,这个非常危险, 建议打开.validatesDomainName=NO, 主要用于这种情况:客户端请求的是子域名, 而证书上的是另外
一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com, 那么mail.google.com是无法验证通过的.
*/
+ (void)setSecurityPolicyWithCerPath:(NSString *)cerPath validatesDomainName:(BOOL)validatesDomainName;
CPXServerDownLoadTool 此类用于断点下载(当程序意外退出或后台退出会保存下载记录)
/**
文件下载
@param urlHost 下载地址
@param progress 下载进度
@param localUrl 本地存储路径
@param success 下载成功
@param failure 下载失败
@return downLoadTask
*/
- (NSURLSessionDownloadTask *)AFDownLoadFileWithUrl:(NSString*)urlHost
progress:(DowningProgress)progress
fileLocalUrl:(NSURL *)localUrl
success:(DonwLoadSuccessBlock)success
failure:(DownLoadfailBlock)failure;
/**
删除对应key所对应的下载数据(用于数据未下载完删除当前进度,使用方法需先取消当前任务)
@param key key
*/
- (void)deleteDownLoadHistory:(NSString*)key;
/** 停止所有的下载任务*/
- (void)stopAllDownLoadTasks;
/** */
ThirdPart
DYModelMaker 字典自动生成模型类:支持多层模型嵌套、自动生成两种框架(MJExtension和YYModel)的系统关键字替换和数组中字典转模型代码
Utls
CPXAlertUtils.h MBProgressHUD的封
/**
备注:
1. 调用 ok,error,warning 方法时,进行信息提示,有对应图片,当时间到后,会自动消失,并且不管是否有传 toView 参数,在显示的同时还是可以进行交互的.即可以重复点击
2. 调用 message 方法,只进行信息展示,没有对应图片.当时间到后,会自动消失,并且不管是否有传 toView 参数,在显示的同时还是可以进行交互的.即可以重复点击
3. 调用 info 方法,显示一个 loading 视图,不会自动消失,需要外界调用对应方法让其消失,并且在展示的时候禁止用户进行其他交互.所以这里添加的图层需要注意,根据需求添加图层
*/
// 成功提示 - 会自动消失
+ (void)success:(NSString *)msg;
+ (void)success:(NSString *)msg duration:(int)duration;
+ (void)success:(NSString *)msg duration:(int)duration toView:(UIView *)toView;
// 错误提示 - 会自动消失
+ (void)error:(NSString *)msg;
+ (void)error:(NSString *)msg duration:(int)duration;
+ (void)error:(NSString *)msg duration:(int)duration toView:(UIView *)toView;
// 警告提示 - 会自动消失
+ (void)warning:(NSString *)msg;
+ (void)warning:(NSString *)msg duration:(int)duration;
+ (void)warning:(NSString *)msg duration:(int)duration toView:(UIView *)toView;
// 信息提示,没有图片
+ (void)message:(NSString *)msg;
+ (void)message:(NSString *)msg duration:(int)duration;
+ (void)message:(NSString *)msg duration:(int)duration toView:(UIView *)toView;
// 转菊花的提示 - 不会自动消失
+ (MBProgressHUD *)loading;
+ (MBProgressHUD *)loading:(NSString *)msg;
+ (MBProgressHUD *)loading:(NSString *)msg toView:(UIView *)toView;
+ (MBProgressHUD *)showTopWinMessage:(NSString *)msg duration:(int)duration;
//停止菊花提示
+ (void)stopLoading:(MBProgressHUD *)hud;
+ (void)stopLoading:(MBProgressHUD *)hud message:(NSString *)msg;
+ (void)stopLoading:(MBProgressHUD *)hud message:(NSString *)msg delay:(CGFloat)seconds completion:(void (^)(void))completion;
/**
系统提示框(默认带一个确认按钮)
*/
+ (void)alertTitle:(NSString *)title
andMsg:(NSString *)msg;
/**
系统提示框(默认带一个确认按钮以及action)
@param title 标题
@param msg 提示信息
@param action 按钮的响应事件
*/
+ (void)alertTitle:(NSString *)title
andMsg:(NSString *)msg
action:(CommonVoidBlocks)action;
/**
系统提示框(可选择按钮个数(最多两个))
@param title 标题
@param msg 提示信息
@param Name 按钮名称数组
@param tapaAction 第一个按钮响应事件
@param cacleAction 第二个按钮响应事件
*/
+(void)alertTitle:(NSString *)title
andMsg:(NSString *)msg
buttonName:(NSArray*)Name
fistAction:(void(^)(void))tapaAction
secondAction:(void(^)(void))cacleAction;
CommonUtls.h 公用的一些工具:获取当前控制器、快速创建model属性(快速创建网络请求返回的字典的属性)、调起相册或相机进行图片选择等
typedef NS_ENUM(NSUInteger, PhotoImagePickerStyle) {
/// 展示底部选择试图(选择是照相还是选择相册)
ShowChooseViewStyle,
///直接照相
TakePhotoStyle,
/// 直接进入相册
ChooseFromAblumStyle,
};
/**
调起相册或相机进行图片选择
参考链接:https://github.com/longitachi/ZLPhotoBrowser
@param number 图片选择的张数
@param selectImageBlock 图片选择成功的回调
*/
+(ZLPhotoActionSheet*)presentImagePickControllerWithImageNumber:(NSInteger)number type:(PhotoImagePickerStyle)style complet:(void (^)(NSArray<UIImage *> *__nullable imagesArray))selectImageBlock;
/**
图片浏览器(可选择样式)
参考链接:https://github.com/CoderXLLau/XLPhotoBrowser
@param imageArray 图片数组(数组里面可以是url字符串,NSurl对象,image对象、)
@param index 当前页数
*/
+(void)showPhotoBrowserWithImages:(NSArray *)imageArray
currentImageIndex:(NSInteger)index;
/**
获取的当前显示的控制器
*/
+ (UIViewController *)cpx_getCurrentDisplayController;
+ (UIViewController *)cpx_getParentControllerFromView:(UIView *)view;
/**
获取当前TabBarController
*/
+(UITabBarController *)currentTtabarController;
/**
获取当前TabBarController持有的NavigationController
*/
+(UINavigationController *)currentTabbarSelectedNavigationController;
/**
获取当前导航栏持有的控制器
*/
+(UIViewController*)getCurrentViewController;
/**
快速创建model属性(快速创建网络请求返回的字典的属性)
@param dict 网络请求返回的字典
*/
+(void)createModelWithDictionary:(NSDictionary *)dict;
/**
获取当前app版本号
*/
+(NSString *)getcCurrentAppVersion;
/**
获取UUID
*/
+ (NSString *)getUUID;
/**
当前国家代码
*/
+(NSString *)currentCountryCode;
/**
设置状态栏颜色
*/
+ (void)setStatusBarBackgroundColor:(UIColor *)color;