赞
踩
- //MARK: - 视图设置
- /**!
- * 设置视图阴影
- *
- * @para uView UIView 目标视图
- * @para shadowColor UIColor 阴影颜色
- * @para shadowOpacity Float 阴影透明度(0.0 ~ 1.0,默认0.5)
- * @para shadowRadius CGFloat 阴影半径(默认3)
- * @para shadowOffset CGSize 阴影偏移,x向右偏移,y向下偏移,默认(0, -3)
- */
- +(void)setViewShadowStyle:(UIView *)uView AndShadowColor:(UIColor *)sColor AndShadowOpacity:(CGFloat)sOpacity AndShadowRadius:(CGFloat)sRadius WithShadowOffset:(CGSize)sOffset{
-
- //shadowColor阴影颜色
- uView.layer.shadowColor = [sColor CGColor];
-
- //阴影透明度
- uView.layer.shadowOpacity = sOpacity;
-
- //阴影半径,默认3
- uView.layer.shadowRadius = sRadius;
-
- //shadowOffset阴影偏移,
- //x向右偏移(正值),y向下偏移(正值),默认(0, -3),这个跟shadowRadius配合使用
- uView.layer.shadowOffset = sOffset;
-
- //设置阴影此属性要设置为 false(masksToBounds 会造成离屏渲染)
- //uView.layer.masksToBounds = false
- UIBezierPath *p = [UIBezierPath bezierPathWithRect:uView.bounds];
- if(uView.layer.cornerRadius > 0){
- //存在圆角
- p = [UIBezierPath bezierPathWithRoundedRect:uView.bounds cornerRadius:uView.layer.cornerRadius];
- }
- uView.layer.shadowPath = p.CGPath;
- }
-
- /**! 视图抖动动画 */
- +(void)shakeAnimationForView:(UIView *)view{
- // 获取到当前的View
- CALayer *viewLayer = view.layer;
-
- // 获取当前View的位置
- CGPoint position = viewLayer.position;
-
- // 移动的两个终点位置
- CGPoint x = CGPointMake(position.x + 10, position.y);
- CGPoint y = CGPointMake(position.x - 10, position.y);
-
- // 设置动画
- CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
-
- // 设置运动形式
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
-
- // 设置开始位置
- [animation setFromValue:[NSValue valueWithCGPoint:x]];
-
- // 设置结束位置
- [animation setToValue:[NSValue valueWithCGPoint:y]];
-
- // 设置自动反转
- [animation setAutoreverses:YES];
-
- // 设置时间
- [animation setDuration:.06];
-
- // 设置次数
- [animation setRepeatCount:3];
-
- // 添加上动画
- [viewLayer addAnimation:animation forKey:nil];
- }
-
-
- //MARK: - 相关动画设置
- /**! tabbar侧滑动画 */
- +(void)tabBarChangeAnimation:(UITabBarController *)tabBarController WithDirection:(NSInteger)direction{
-
- CATransition *transition = [[CATransition alloc] init];
- transition.duration = 0.2;
- transition.type = kCATransitionMoveIn;//kCATransitionReveal
-
- if(direction == 0) {
- transition.subtype = kCATransitionFromLeft;
- }
- else{
- transition.subtype = kCATransitionFromRight;
- }
-
- //transition.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut)
- transition.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionDefault];
-
- [[[tabBarController view] layer] addAnimation:transition forKey:@"reveal"];//switchView
- }
-
-
- //MARK: - Tabbar相关设置
- /**!
- * 设置tabBar的尺寸
- * 调用方法:自定义View 继承自 UITabBarController,在 viewWillLayoutSubviews 中使用:
- * [Utils setTabbarHeight:self.tabBar];
- */
- +(void)setTabbarHeight:(UITabBar *)tabBar{
- CGRect rectTabbar = tabBar.frame;
-
- if (rectTabbar.size.height >= 49) {
- rectTabbar.size.height = K_APP_TABBAR_HEIGHT;
-
- CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
- CGFloat statusBarHeight = statusBarFrame.size.height;
- if (statusBarHeight > 20.0) {
- rectTabbar.origin.y = K_APP_HEIGHT - K_APP_TABBAR_HEIGHT - 20;
- }
- else{
- rectTabbar.origin.y = K_APP_HEIGHT - K_APP_TABBAR_HEIGHT;
- }
-
- tabBar.frame = rectTabbar;
- }
- }
-
- /**!
- * 设置tabBar的尺寸 顶部边框线
- */
- +(void)setTopLine:(UITabBar *)tabBar{
- // [S] 顶部边框线
- NSData *topLineData = [[NSUserDefaults standardUserDefaults] dataForKey:K_APP_TABBAR_TOP_LINE];
- if (topLineData == nil || [topLineData length] <= 0) {
- CGRect rect = CGRectMake(0, 0, K_APP_WIDTH, 0.1);
- UIGraphicsBeginImageContext(rect.size);
-
- CGContextRef context = UIGraphicsGetCurrentContext();
- CGContextSetRGBFillColor(context, 223.0, 223.0, 223.0, 1.0);
- CGContextFillRect(context, rect);
-
- UIImage *imgTemp = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- topLineData = UIImagePNGRepresentation(imgTemp);
- [[NSUserDefaults standardUserDefaults] setObject:topLineData forKey:K_APP_TABBAR_TOP_LINE];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- tabBar.shadowImage = [UIImage imageWithData:topLineData];
- // [E] 顶部边框线
- }
-
- /**!
- * 清除tabbar顶部边线
- */
- +(void)clearnTabBarTopLine:(UITabBar *)tabBar{
-
- NSData *clearnLineData = [[NSUserDefaults standardUserDefaults] dataForKey:K_APP_TABBAR_CLEARN_IMAGE];
-
- if (clearnLineData == nil || [clearnLineData length] <= 0) {
- CGRect rect = CGRectMake(0, 0, 1, 1);
- UIGraphicsBeginImageContext(rect.size);
-
- CGContextRef context = UIGraphicsGetCurrentContext();
-
- CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.0);
- CGContextFillRect(context, rect);
-
- UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- clearnLineData = UIImagePNGRepresentation(theImage);
- [[NSUserDefaults standardUserDefaults] setObject:clearnLineData forKey:K_APP_TABBAR_CLEARN_IMAGE];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
-
- tabBar.backgroundImage = [UIImage imageWithData:clearnLineData];
- tabBar.shadowImage = [UIImage imageWithData:clearnLineData];
- }
-
-
- //MARK: - 图片相关处理
- /**! 图片不变形处理 */
- +(void)imgNoTransformation:(UIImageView *)img{
- img.contentMode = UIViewContentModeScaleAspectFill;
- img.clipsToBounds = YES; //是否剪切掉超出 UIImageView 范围的图片
- img.contentScaleFactor = [UIScreen mainScreen].scale;
- }
-
-
- //MARK: - 信息验证
- /**!
- * 验证手机号
- * @return true 通过验证
- */
- +(BOOL)checkPhoneNo:(NSString *)strPhoneNo {
-
- if (!strPhoneNo || [strPhoneNo isEqualToString:@""]) {
- return NO;
- }
-
- NSString *strRegex = @"^1[34578]([0-9]{9})$";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",strRegex];
-
- return [predicate evaluateWithObject:strPhoneNo];
- }
-
- /**!
- * 验证邮箱
- * @return true 通过验证
- */
- +(BOOL)checkEmail:(NSString *)strEmail {
-
- if (!strEmail || [strEmail isEqualToString:@""]) {
- return NO;
- }
-
- NSString *strRegex = @"^[A-Z0-9a-z_\\.\\-]+\\@([A-Za-z0-9\\-]+\\.)+([A-Za-z0-9])+$";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",strRegex];
-
- return [predicate evaluateWithObject:strEmail];
- }
-
-
- /**!
- * 验证密码(密码为6~20位的数字字母)
- * @return true 通过验证
- */
- +(BOOL)checkPassword:(NSString *)strPwd {
-
- if (!strPwd || [strPwd isEqualToString:@""]) {
- return NO;
- }
-
- //长度限制
- NSUInteger length = strPwd.length;
- if (length < 6 || length > 20) {
- return NO;
- }
-
- //是否含有Emoji 表情
- if ([Utils stringContainsEmoji:strPwd]) {
- return NO;
- }
-
- NSString *strRegex = @"^[A-Za-z0-9 ]{6,20}$";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",strRegex];
- return [predicate evaluateWithObject:strPwd];
- }
-
- /**!
- * 验证验证码(长度6位的数字字母)
- * @return true 通过验证
- */
- +(BOOL)checkPhoneCode:(NSString *)strCode {
-
- if (!strCode || [strCode isEqualToString:@""]) {
- return NO;
- }
-
- //长度限制
- NSUInteger length = strCode.length;
- if (length > 6) {
- return NO;
- }
-
- NSString *strRegex = @"^[0-9a-zA-Z]{4,6}$";
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",strRegex];
- return [predicate evaluateWithObject:strCode];
- }
-
- /**!
- * 验证姓名(字母或中文)
- * @params strName NSString
- * @params len NSInteger 长度
- * @return true 通过验证
- */
- +(BOOL)checkName:(NSString *)strName AndLength:(NSInteger)len {
-
- if (!strName || [strName isEqualToString:@""]) {
- return NO;
- }
-
- //长度限制
- NSUInteger length = strName.length;
- if (length > len) {
- return NO;
- }
-
- NSString *strRegex = [NSString stringWithFormat:@"^[A-Za-z\\u4e00-\\u9fa5]{2,%lD}$",len];
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",strRegex];
- return [predicate evaluateWithObject:strName];
- }
-
- /**!
- * 验证身份证(15/18位)
- * @params value NSString
- * @return true 通过验证
- */
- +(BOOL)checkIDCardNumber:(NSString *)value {
-
- value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
- NSInteger length = 0;
- if (!value) return NO;
- else {
- length = value.length;
- //不满足15位和18位,即身份证错误
- if (length != 15 && length != 18) return NO;
- }
-
- // 省份代码
- NSArray *areasArray = @[@"11",@"12", @"13",@"14", @"15",@"21", @"22",@"23", @"31",@"32", @"33",@"34", @"35",@"36", @"37",@"41", @"42",@"43", @"44",@"45", @"46",@"50", @"51",@"52", @"53",@"54", @"61",@"62", @"63",@"64", @"65",@"71", @"81",@"82", @"91"];
-
- // 检测省份身份行政区代码
- NSString *valueStart2 = [value substringToIndex:2];
- BOOL areaFlag = NO; //标识省份代码是否正确
- for (NSString *areaCode in areasArray) {
- if ([areaCode isEqualToString:valueStart2]) {
- areaFlag = YES;
- break;
- }
- }
-
- if (!areaFlag) return NO;
-
- NSRegularExpression *regularExpression;
- NSUInteger numberofMatch;
- int year = 0;
-
- //分为15位、18位身份证进行校验
- switch (length) {
- case 15:
- //获取年份对应的数字
- year = [value substringWithRange:NSMakeRange(6,2)].intValue +1900;
- if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {
- //创建正则表达式 NSRegularExpressionCaseInsensitive:不区分字母大小写的模式
- regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"
- options:NSRegularExpressionCaseInsensitive error:nil];//测试出生日期的合法性
- }
- else{
- regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"
- options:NSRegularExpressionCaseInsensitive error:nil];//测试出生日期的合法性
- }
- //使用正则表达式匹配字符串 NSMatchingReportProgress:找到最长的匹配字符串后调用block回调
- numberofMatch = [regularExpression numberOfMatchesInString:value
- options:NSMatchingReportProgress
- range:NSMakeRange(0, value.length)];
- if(numberofMatch >0) return YES;
- else return NO;
- case 18:
- year = [value substringWithRange:NSMakeRange(6,4)].intValue;
- if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {
- regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\\d{4}(((19|20)\\d{2}(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((19|20)\\d{2}(0[13578]|1[02])31)|((19|20)\\d{2}02(0[1-9]|1\\d|2[0-8]))|((19|20)([13579][26]|[2468][048]|0[048])0229))\\d{3}(\\d|X|x)?$"
- options:NSRegularExpressionCaseInsensitive error:nil];//测试出生日期的合法性
-
- }
- else{
- regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\\d{4}(((19|20)\\d{2}(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((19|20)\\d{2}(0[13578]|1[02])31)|((19|20)\\d{2}02(0[1-9]|1\\d|2[0-8]))|((19|20)([13579][26]|[2468][048]|0[048])0229))\\d{3}(\\d|X|x)?$"
- options:NSRegularExpressionCaseInsensitive error:nil];//测试出生日期的合法性
- }
-
- numberofMatch = [regularExpression numberOfMatchesInString:value
- options:NSMatchingReportProgress
- range:NSMakeRange(0, value.length)];
- if(numberofMatch >0) {
- //1:校验码的计算方法 身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。将这17位数字和系数相乘的结果相加。
- int S = [value substringWithRange:NSMakeRange(0,1)].intValue*7 + [value substringWithRange:NSMakeRange(10,1)].intValue *7 + [value substringWithRange:NSMakeRange(1,1)].intValue*9 + [value substringWithRange:NSMakeRange(11,1)].intValue *9 + [value substringWithRange:NSMakeRange(2,1)].intValue*10 + [value substringWithRange:NSMakeRange(12,1)].intValue *10 + [value substringWithRange:NSMakeRange(3,1)].intValue*5 + [value substringWithRange:NSMakeRange(13,1)].intValue *5 + [value substringWithRange:NSMakeRange(4,1)].intValue*8 + [value substringWithRange:NSMakeRange(14,1)].intValue *8 + [value substringWithRange:NSMakeRange(5,1)].intValue*4 + [value substringWithRange:NSMakeRange(15,1)].intValue *4 + [value substringWithRange:NSMakeRange(6,1)].intValue*2 + [value substringWithRange:NSMakeRange(16,1)].intValue *2 + [value substringWithRange:NSMakeRange(7,1)].intValue *1 + [value substringWithRange:NSMakeRange(8,1)].intValue *6 + [value substringWithRange:NSMakeRange(9,1)].intValue *3;
-
- //2:用加出来和除以11,看余数是多少?余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字
- int Y = S %11;
- NSString *M =@"F";
- NSString *JYM =@"10X98765432";
- M = [JYM substringWithRange:NSMakeRange(Y,1)];
-
- // 3:获取校验位
- NSString *lastStr = [value substringWithRange:NSMakeRange(17,1)];
- NSLog(@"%@",M);
- NSLog(@"%@",[value substringWithRange:NSMakeRange(17,1)]);
-
- //4:检测ID的校验位
- if ([lastStr isEqualToString:@"x"]) {
- if ([M isEqualToString:@"X"]) return YES;
- else return NO;
- }
- else{
- if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) return YES;
- else return NO;
- }
- }
- else return NO;
- default:
- return NO;
- }
- }
-
-
- //MARK: - 相关App是否有安装检测
- //https://www.zhihu.com/question/19907735
- /**! 是否有安装QQ */
- +(BOOL)isInstallForQQ{
- //QQ mqq:// 或 mqqiapi://
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqqiapi://"]]) {
- return NO;
- }
- }
-
- return YES;
- }
-
- /**! 是否有安装微信 */
- +(BOOL)isInstallForWechat {
- //微信 weixin:// 或 wechat://
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"wechat://"]]) {
- return NO;
- }
- }
-
- return YES;
- }
-
- /**! 是否有安装新浪微博 */
- +(BOOL)isInstallForSina {
- //新浪微博 weibo:// 或 sinaweibo://
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weibo://"]]) {
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"sinaweibo://"]]) {
- return NO;
- }
- }
-
- return YES;
- }
-
- /**! 是否有安装支付宝 */
- +(BOOL)isInstallForAliPay {
- //支付宝 alipay://
- if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"alipay://"]]) {
- return NO;
- }
-
- return YES;
- }
-
- //MARK: - 获取设备信息
- /**!
- * 获取当前设备的UUID
- */
- +(NSString *)getCurrentDeviceUUID {
- NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor];
- return [uuid UUIDString];
- }
-
- /**!
- * 获取手机具体型号
- * 需要添加 #import <sys/utsname.h> 引用
- * 调用:[Utils currentModel:[NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding]]
- */
- +(NSString *)currentModel:(NSString *)phoneModel {
-
- if ([phoneModel isEqualToString:@"iPhone3,1"] ||
- [phoneModel isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
- if ([phoneModel isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
- if ([phoneModel isEqualToString:@"iPhone5,1"] ||
- [phoneModel isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
- if ([phoneModel isEqualToString:@"iPhone5,3"] ||
- [phoneModel isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
- if ([phoneModel isEqualToString:@"iPhone6,1"] ||
- [phoneModel isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
- if ([phoneModel isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
- if ([phoneModel isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
- if ([phoneModel isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
- if ([phoneModel isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
- if ([phoneModel isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
- if ([phoneModel isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
- if ([phoneModel isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
- if ([phoneModel isEqualToString:@"iPhone10,1"] ||
- [phoneModel isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
- if ([phoneModel isEqualToString:@"iPhone10,2"] ||
- [phoneModel isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
- if ([phoneModel isEqualToString:@"iPhone10,3"] ||
- [phoneModel isEqualToString:@"iPhone10,6"]) return @"iPhone X";
-
- if ([phoneModel isEqualToString:@"iPad1,1"]) return @"iPad";
- if ([phoneModel isEqualToString:@"iPad2,1"] ||
- [phoneModel isEqualToString:@"iPad2,2"] ||
- [phoneModel isEqualToString:@"iPad2,3"] ||
- [phoneModel isEqualToString:@"iPad2,4"]) return @"iPad 2";
- if ([phoneModel isEqualToString:@"iPad3,1"] ||
- [phoneModel isEqualToString:@"iPad3,2"] ||
- [phoneModel isEqualToString:@"iPad3,3"]) return @"iPad 3";
- if ([phoneModel isEqualToString:@"iPad3,4"] ||
- [phoneModel isEqualToString:@"iPad3,5"] ||
- [phoneModel isEqualToString:@"iPad3,6"]) return @"iPad 4";
- if ([phoneModel isEqualToString:@"iPad4,1"] ||
- [phoneModel isEqualToString:@"iPad4,2"] ||
- [phoneModel isEqualToString:@"iPad4,3"]) return @"iPad Air";
- if ([phoneModel isEqualToString:@"iPad5,3"] ||
- [phoneModel isEqualToString:@"iPad5,4"]) return @"iPad Air 2";
- if ([phoneModel isEqualToString:@"iPad6,3"] ||
- [phoneModel isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7-inch";
- if ([phoneModel isEqualToString:@"iPad6,7"] ||
- [phoneModel isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9-inch";
- if ([phoneModel isEqualToString:@"iPad6,11"] ||
- [phoneModel isEqualToString:@"iPad6,12"]) return @"iPad 5";
- if ([phoneModel isEqualToString:@"iPad7,1"] ||
- [phoneModel isEqualToString:@"iPad7,2"]) return @"iPad Pro 12.9-inch 2";
- if ([phoneModel isEqualToString:@"iPad7,3"] ||
- [phoneModel isEqualToString:@"iPad7,4"]) return @"iPad Pro 10.5-inch";
-
- if ([phoneModel isEqualToString:@"iPad2,5"] ||
- [phoneModel isEqualToString:@"iPad2,6"] ||
- [phoneModel isEqualToString:@"iPad2,7"]) return @"iPad mini";
- if ([phoneModel isEqualToString:@"iPad4,4"] ||
- [phoneModel isEqualToString:@"iPad4,5"] ||
- [phoneModel isEqualToString:@"iPad4,6"]) return @"iPad mini 2";
- if ([phoneModel isEqualToString:@"iPad4,7"] ||
- [phoneModel isEqualToString:@"iPad4,8"] ||
- [phoneModel isEqualToString:@"iPad4,9"]) return @"iPad mini 3";
- if ([phoneModel isEqualToString:@"iPad5,1"] ||
- [phoneModel isEqualToString:@"iPad5,2"]) return @"iPad mini 4";
-
- if ([phoneModel isEqualToString:@"iPod1,1"]) return @"iTouch";
- if ([phoneModel isEqualToString:@"iPod2,1"]) return @"iTouch2";
- if ([phoneModel isEqualToString:@"iPod3,1"]) return @"iTouch3";
- if ([phoneModel isEqualToString:@"iPod4,1"]) return @"iTouch4";
- if ([phoneModel isEqualToString:@"iPod5,1"]) return @"iTouch5";
- if ([phoneModel isEqualToString:@"iPod7,1"]) return @"iTouch6";
-
- if ([phoneModel isEqualToString:@"i386"] || [phoneModel isEqualToString:@"x86_64"]) return @"iPhone Simulator";
-
- return @"Unknown";
- }
-
-
- //MARK: - Emoji表情检测
- /**!
- * 是否含有Emoji 表情(true 含有)
- */
- +(BOOL)stringContainsEmoji:(NSString *)string{
-
- __block BOOL returnValue = FALSE;
- [string enumerateSubstringsInRange:NSMakeRange(0, string.length)
- options:NSStringEnumerationByComposedCharacterSequences
- usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
-
- unichar hs = [substring characterAtIndex:0];
- // surrogate pair
- if (0xd800 <= hs && hs <= 0xdbff) {
- if (substring.length > 1) {
- unichar ls =[substring characterAtIndex:1];
-
- NSInteger uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
- if (0x1d000 <= uc && uc <= 0x1f77f){
- returnValue = YES;
- }
- }
- }
- else if (substring.length > 1) {
- unichar ls =[substring characterAtIndex:1];
- if (ls == 0x20e3){
- returnValue = YES;
- }
- }
- else {
- // non surrogate
- if (0x2100 <= hs && hs <= 0x27ff){
- returnValue = YES;
- }
- else if (0x2B05 <= hs && hs <= 0x2b07){
- returnValue = YES;
- }
- else if (0x2934 <= hs && hs <= 0x2935){
- returnValue = YES;
- }
- else if (0x3297 <= hs && hs <= 0x3299){
- returnValue = YES;
- }
- else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50){
- returnValue = YES;
- }
- }
- }];
-
- return returnValue;
- }
-
-
- //MARK: - 时间处理
- /** 将Linux时间装换为字符串时间 */
- +(NSString *)formatDateToString:(NSTimeInterval)linuxTime WithFormat:(NSString *)format{
-
- long long _timeInterval = linuxTime;
- NSString *_temp = [NSString stringWithFormat:@"%.0f",linuxTime];
- if (_temp.length > 10) {
- _temp = [_temp substringToIndex:10];
-
- _timeInterval = [_temp longLongValue];
- }
-
- NSDate *date = [NSDate dateWithTimeIntervalSince1970:_timeInterval];
- NSDateFormatter *fomatter = [[NSDateFormatter alloc] init];
- [fomatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC+8"]];
- [fomatter setDateFormat:format];
-
- NSString *_strInfo = [fomatter stringFromDate:date];
- return _strInfo;
- }
-
- /** 获取当前时间 */
- +(NSString *)getCurrentDateToString:(NSString *)format{
- NSDate *date = [NSDate date];
-
- NSDateFormatter *fomatter = [[NSDateFormatter alloc] init];
- [fomatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC+8"]];
- [fomatter setDateFormat:format];
-
- NSString *_strInfo = [fomatter stringFromDate:date];
- return _strInfo;
- }
-
-
- //MARK: - 缓存相关设置
- /**!
- * 获取系统缓存
- * //缓存目录
- #define K_APPLICATION_CACHE_PATH [NSString stringWithFormat:@"%@/%@",[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject],K_APP_BUNDLE_ID]
- */
- +(NSString *)getAppCacheSize{
-
- NSFileManager *fileManage = [NSFileManager defaultManager];
- NSString *strResult = @"0M";
- BOOL isDirectory = NO;
-
- //是否存在
- if ([fileManage fileExistsAtPath:K_APPLICATION_CACHE_PATH isDirectory:&isDirectory]) {
-
- @try {
- float fsize = 0.0;
- NSDictionary *attributDic;
-
- //文件夹
- if(isDirectory) {
-
- NSString *tempPath;
-
- //获取该目录下所有文件
- for (NSString *strItem in [fileManage subpathsAtPath:K_APPLICATION_CACHE_PATH]) {
- tempPath = [NSString stringWithFormat:@"%@/%@",K_APPLICATION_CACHE_PATH,strItem];
-
- //存在,且为文件
- if ([fileManage fileExistsAtPath:tempPath isDirectory:&isDirectory] && isDirectory == NO) {
- attributDic = [fileManage attributesOfItemAtPath:tempPath error:nil];
- fsize = fsize + [[attributDic valueForKey:NSFileSize] floatValue];
- }
- }
- }
- else{
- attributDic = [fileManage attributesOfItemAtPath:K_APPLICATION_CACHE_PATH error:nil];
- fsize = [[attributDic valueForKey:NSFileSize] floatValue];
- }
-
- //计算缓存大小
- fsize = fsize / (1024.0 * 1024.0);
- if (fsize > 0.0) {
- strResult = [NSString stringWithFormat:@"%.2fM",fsize];
- }
- } @catch (NSException *exception) {
- NSLog(@"获取缓存异常:%@",exception);
- }
- }
-
- return strResult;
- }
-
- /**!
- * 清理系统缓存
- */
- +(BOOL)clearnAppCache{
-
- NSFileManager *fileManage = [NSFileManager defaultManager];
- NSString *tempPath;
- BOOL isDic = NO;
- BOOL isOk = NO;
-
- //路径存在,且为文件夹
- if ([fileManage fileExistsAtPath:K_APPLICATION_CACHE_PATH isDirectory:&isDic] && isDic) {
-
- @try {
- for (NSString *strItem in [fileManage subpathsAtPath:K_APPLICATION_CACHE_PATH]) {
- tempPath = [NSString stringWithFormat:@"%@/%@",K_APPLICATION_CACHE_PATH,strItem];
-
- //移除
- if ([fileManage fileExistsAtPath:tempPath]) {
- [fileManage removeItemAtPath:tempPath error:nil];
- }
- }
-
- isOk = YES;
- } @catch (NSException *exception) {
- NSLog(@"清理缓存异常:%@",exception);
- }
- }
-
- return isOk;
- }
-
-
- //MARK: - 公共的请求方法
- /**! 开启设置权限 */
- +(void)openSetting{
- NSString *strUrl = UIApplicationOpenSettingsURLString;
- NSURL *url = [NSURL URLWithString:strUrl];
-
- if ([[UIApplication sharedApplication] canOpenURL:url]) {
- [[UIApplication sharedApplication] openURL:url];
- }
- }
-
-
- //MARK: - 获取文本的宽度
- /**!
- * 获取文本的宽度
- */
- +(CGFloat)getWidthForString:(NSString *)value andFontSize:(UIFont *)font andHeight:(CGFloat)height{
- CGSize sizeToFit = [value sizeWithFont:font constrainedToSize:CGSizeMake(CGFLOAT_MAX, height) lineBreakMode:NSLineBreakByWordWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置
-
- return sizeToFit.width;
- }
-
- /** 获取文本的高度 */
- +(CGFloat)getHeightForString:(NSString *)value andFontSize:(UIFont *)font andWidth:(CGFloat)width{
- CGSize sizeToFit = [value sizeWithFont:font constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置
-
- return sizeToFit.height;
- }
-
- /**!
- * 获取文本框的高度
- */
- +(CGFloat)getTextViewHeight:(UITextView *)textView AndFixedWidth:(CGFloat)width {
-
- CGFloat fw = 0.0;
-
- CGSize size = CGSizeMake(width, CGFLOAT_MAX);
- CGSize constraint = [textView sizeThatFits:size];
- fw = constraint.height + 10.0;
-
- return fw;
- }
-
-
- //MARK: - 设置富文本
- /**! 设置富文本 */
- +(NSAttributedString *)setAttributeStringText:(NSString *)strFullText andFullTextFont:(UIFont *)textFont andFullTextColor:(UIColor *)textColor withChangeText:(NSString *)changeText withChangeFont:(UIFont *)changFont withChangeColor:(UIColor *)changeColor isLineThrough:(BOOL)lineThrough{
-
- NSDictionary<NSAttributedStringKey,id> *dicAttr;
- NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:strFullText];
-
- //需要改变的文本
- NSRange range = [strFullText rangeOfString:changeText];
-
- dicAttr = @{
- NSFontAttributeName:changFont,
- NSForegroundColorAttributeName:changeColor
- };
-
- if (lineThrough) {
- [dicAttr setValue:[[NSNumber alloc] initWithInt:1] forKey:NSStrikethroughStyleAttributeName];
- }
- [attributeString addAttributes:dicAttr range:range];
-
- //不需要改变的文本
- NSString *oldText = [strFullText stringByReplacingOccurrencesOfString:changeText withString:@""];
- range = [strFullText rangeOfString:oldText];
-
- dicAttr = @{
- NSFontAttributeName:textFont,
- NSForegroundColorAttributeName:textColor
- };
- [attributeString addAttributes:dicAttr range:range];
-
- return attributeString;
- }
-
-
- //MARK: - Json 与 字典、数组类型转换
- /**!
- * 数组转换为NString
- * @returns: NString
- */
- +(NSString *)getJSONStringFromData:(id)idData{
-
- if (![NSJSONSerialization isValidJSONObject:idData]) {
- NSLog(@"无法解析出JSONString");
- return @"";
- }
-
- NSData *data = [NSJSONSerialization dataWithJSONObject:idData
- options:NSJSONWritingPrettyPrinted
- error:nil];
- NSString *strReturn = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- return strReturn;
- }
-
-
- //MARK: - 网络请求方法
- /**
- * 格式化请求参数
- * @param dicParasm NSDictionary
- */
- +(NSDictionary *)formatRequestParams:(NSDictionary *)dicParasm{
-
- NSMutableDictionary *_dicTemp = [[NSMutableDictionary alloc] initWithDictionary:dicParasm];
- if ([TDUser userIsLogin]) {
- [_dicTemp setObject:[TDUser getLoginToken] forKey:@"token"];
- }
-
- return _dicTemp;
- }
-
- /**!
- * post 接口请求
- * @para strUrl String 请求地址
- * @para paras [String:Any] 请求参数
- * @para successBack 成功回调
- * @para failureBack 失败回调
- */
- +(void)postRequestForServerData:(NSString *)strUrl withParameters:(NSDictionary *)paras AndHTTPHeaderField:(void(^)(AFHTTPRequestSerializer *_requestSerializer))headerField AndSuccessBack:(void(^)(id _responseData))successBack AndFailureBack:(void(^)(NSString *_strError))failureBack WithisLoading:(BOOL)isLoading{
-
- NSLog(@"请求地址:%@,参数:%@",strUrl,paras);
-
- if (![K_APP_REACHABILITY isReachable]) {
- dispatch_async(dispatch_get_main_queue(), ^{
- [MBProgressHUD showError:@"网络连接异常"];
- });
-
- NSLog(@"网络连接异常");
- return;
- }
-
- __block UIView *_view;
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- _view = [[AppDelegate shareInstance] window].rootViewController.view;
- if (_view) {
- [MBProgressHUD showMessage:@"" toView:_view];
- }
- else {
- [MBProgressHUD showMessage:@""];
- }
- });
- }
-
- AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
-
- //设置HTTPHeaderField
- if (headerField) {
- AFHTTPRequestSerializer *_requestSerializer = [AFHTTPRequestSerializer serializer];
- headerField(_requestSerializer);
- sessionManager.requestSerializer = _requestSerializer;
- }
-
- //提交请求
- [sessionManager POST:strUrl
- parameters:paras
- progress:nil
- success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
-
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil){
- BOOL exists = NO;
- for (UIView *object in _view.subviews) {
- if ([object isMemberOfClass:[MBProgressHUD class]]) {
- exists = YES;
- break;
- }
- }
-
- if (!exists) {
- [MBProgressHUD showMessage:@"" toView:_view];
- }
- }
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- NSLog(@"请求结果:%@",responseObject);
-
- NSDictionary *jsonData = responseObject;
- NSInteger resultCode = [[jsonData valueForKey:K_APP_REQUEST_CODE] integerValue];
- NSString *strMessage = [jsonData valueForKey:K_APP_REQUEST_MSG];
-
- //成功
- if (resultCode == K_APP_REQUEST_SUCCESS_CODE) {
- if (successBack != nil) {
- successBack([jsonData valueForKey:K_APP_REQUEST_DATA]);
- }
- }
- else if(resultCode == 200){
- if (successBack != nil) {
- successBack(jsonData);
- }
- }
- //token 失效,需重新登录
- else if(resultCode == K_APP_REQUEST_TOKEN_FAILURE_CODE){
-
- if (failureBack != nil) {
- failureBack(strMessage);
- }
-
- NSLog(@"登录Token 失效");
- [[NSNotificationCenter defaultCenter] postNotificationName:K_APP_TOKEN_FAILURE_NOTICE object:nil];
- }
- else{
- [MBProgressHUD showError:strMessage];
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil)
- [MBProgressHUD hideHUDForView:_view];
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- if (failureBack != nil) {
- failureBack([error localizedDescription]);
- }
-
- NSLog(@"请求异常:%@",[error localizedDescription]);
- }];
- }
-
-
- /**!
- * get 接口请求
- * @para strUrl String 请求地址
- * @para paras [String:Any] 请求参数
- * @para successBack 成功回调
- * @para failureBack 失败回调
- */
- +(void)getRequestForServerData:(NSString *)strUrl withParameters:(NSDictionary *)paras AndHTTPHeaderField:(void(^)(AFHTTPRequestSerializer *_requestSerializer))headerField AndSuccessBack:(void(^)(id _responseData))successBack AndFailureBack:(void(^)(NSString *_strError))failureBack WithisLoading:(BOOL)isLoading{
-
- NSLog(@"请求地址:%@,参数:%@",strUrl,paras);
-
- if (![K_APP_REACHABILITY isReachable]) {
- dispatch_async(dispatch_get_main_queue(), ^{
- [MBProgressHUD showError:@"网络连接异常"];
- });
-
- NSLog(@"网络连接异常");
- return;
- }
-
- __block UIView *_view;
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- _view = [[AppDelegate shareInstance] window].rootViewController.view;
- if (_view) {
- [MBProgressHUD showMessage:@"" toView:_view];
- }
- else {
- [MBProgressHUD showMessage:@""];
- }
- });
- }
-
- AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
-
- //设置HTTPHeaderField
- if (headerField) {
- AFHTTPRequestSerializer *_requestSerializer = [AFHTTPRequestSerializer serializer];
- headerField(_requestSerializer);
- sessionManager.requestSerializer = _requestSerializer;
- }
-
- //提交请求
- [sessionManager GET:strUrl
- parameters:paras
- progress:nil
- success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
-
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil){
- BOOL exists = NO;
- for (UIView *object in _view.subviews) {
- if ([object isMemberOfClass:[MBProgressHUD class]]) {
- exists = YES;
- break;
- }
- }
-
- if (!exists) {
- [MBProgressHUD showMessage:@"" toView:_view];
- }
- }
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- NSLog(@"请求结果:%@",responseObject);
-
- NSDictionary *jsonData = responseObject;
- NSInteger resultCode = [[jsonData valueForKey:K_APP_REQUEST_CODE] integerValue];
- NSString *strMessage = [jsonData valueForKey:K_APP_REQUEST_MSG];
-
- //成功
- if (resultCode == K_APP_REQUEST_SUCCESS_CODE) {
- if (successBack != nil) {
- if ([jsonData.allKeys containsObject:K_APP_REQUEST_DATA]) {
- successBack([jsonData valueForKey:K_APP_REQUEST_DATA]);
- }
- else{
- successBack(jsonData);
- }
- }
- }
- else if(resultCode == 200 || resultCode == 0){
- //token 失效,需重新登录
- if(resultCode == K_APP_REQUEST_TOKEN_FAILURE_CODE && [strMessage containsString:@"token"]){
- if (failureBack != nil) {
- failureBack(strMessage);
- }
-
- NSLog(@"登录Token 失效");
- [[NSNotificationCenter defaultCenter] postNotificationName:K_APP_TOKEN_FAILURE_NOTICE object:nil];
- }
- else{
- if (successBack != nil) {
- successBack(jsonData);
- }
- }
- }
- else{
- [MBProgressHUD showError:strMessage];
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil)
- [MBProgressHUD hideHUDForView:_view];
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- if (failureBack != nil) {
- failureBack([error localizedDescription]);
- }
-
- NSLog(@"请求异常:%@",[error localizedDescription]);
- }];
- }
-
- /**
- * 异步POST请求:以body方式,支持数组
- *
- * @param url 请求的url
- * @param body body数据
- * @param success 成功回调
- * @param failure 失败回调
- * @param isLoading BOOL
- */
- +(void)postWithUrl:(NSString *)url body:(NSData *)body WithSuccess:(void(^)(id _Nonnull response))success WithFailure:(void(^)(NSString *error))failure WithisLoading:(BOOL)isLoading{
- NSLog(@"请求地址:%@",url);
-
- if (![K_APP_REACHABILITY isReachable]) {
- dispatch_async(dispatch_get_main_queue(), ^{
- [MBProgressHUD showError:@"网络连接异常"];
- });
- NSLog(@"网络连接异常");
- return;
- }
-
- __block UIView *_view;
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- _view = [[AppDelegate shareInstance] window].rootViewController.view;
- if (_view) {
- BOOL exists = NO;
- for (UIView *object in _view.subviews) {
- if ([object isMemberOfClass:[MBProgressHUD class]]) {
- exists = YES;
- break;
- }
- }
-
- if (!exists) {
- [MBProgressHUD showMessage:@"" toView:_view];
- }
- }
- else {
- [MBProgressHUD showMessage:@""];
- }
- });
- }
-
- AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
-
- NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:url parameters:nil error:nil];
- request.timeoutInterval = K_APP_URLTIME_OUT_INTERVAL;
- [request setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
- [request setValue:@"application/x-www-form-urlencoded;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
- [request setValue:@"application/x-plist;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
-
- //设置body
- [request setHTTPBody:body];
-
- AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer];
- responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",
- @"text/html",
- @"text/json",
- @"text/javascript",
- @"text/plain",
- nil];
- manager.responseSerializer = responseSerializer;
-
- [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
-
- NSLog(@"请求结果:%@",responseObject);
-
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil)
- [MBProgressHUD hideHUDForView:_view];
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- if (error == nil) {
- NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:[responseObject mj_JSONData]
- options:NSJSONReadingMutableContainers
- error:nil];
-
- NSLog(@"请求结果2:%@",responseObject);
- NSInteger resultCode = [[jsonData valueForKey:K_APP_REQUEST_CODE] integerValue];
- NSString *strMessage = [jsonData valueForKey:K_APP_REQUEST_MSG];
-
- //成功
- if (resultCode == K_APP_REQUEST_SUCCESS_CODE) {
- if (success) {
- if ([jsonData.allKeys containsObject:K_APP_REQUEST_DATA]) {
- success([jsonData valueForKey:K_APP_REQUEST_DATA]);
- }
- else{
- success(jsonData);
- }
- }
- }
- //token 失效,需重新登录
- else if(resultCode == K_APP_REQUEST_TOKEN_FAILURE_CODE){
- if (failure != nil) {
- failure(strMessage);
- }
-
- NSLog(@"登录Token 失效");
- [[NSNotificationCenter defaultCenter] postNotificationName:K_APP_TOKEN_FAILURE_NOTICE object:nil];
- }
- else{
- if (failure != nil) {
- if (strMessage && ![strMessage isEqualToString:@""]) {
- failure(strMessage);
- }
- else{
- failure([error localizedDescription]);
- }
- }
- }
- }
- else {
- if (failure != nil) {
- failure([error localizedDescription]);
- }
- }
- }] resume];
- }
-
- /**!
- * 文件或图片上传
- * @para strUrl String 上传地址
- * @para uploadformDataBack 上传参数设置
- * @para successBack 成功回调
- * @para failureBack 失败回调
- */
- +(void)postImageUploadToServer:(NSString *)strUrl AndUploadformDataBack:(void(^)(id<AFMultipartFormData> formData))formDataBack AndSuccessBack:(void(^)(NSObject *_responseData))successBack AndFailureBack:(void(^)(NSString *_strError))failureBack WithisLoading:(BOOL)isLoading{
-
- NSLog(@"请求地址:%@",strUrl);
-
- if (![K_APP_REACHABILITY isReachable]) {
- [MBProgressHUD showError:@"网络连接异常"];
- NSLog(@"网络连接异常");
- return;
- }
-
- __block UIView *_view;
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- _view = [[AppDelegate shareInstance] window].rootViewController.view;
- if (_view) {
- BOOL exists = NO;
- for (UIView *object in _view.subviews) {
- if ([object isMemberOfClass:[MBProgressHUD class]]) {
- exists = YES;
- break;
- }
- }
-
- if (!exists) {
- [MBProgressHUD showMessage:@"" toView:_view];
- }
- }
- else {
- [MBProgressHUD showMessage:@""];
- }
- });
- }
-
- AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
- [sessionManager POST:strUrl
- parameters:nil
- constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
- //指定参数
- if (formDataBack) {
- formDataBack(formData);
- }
- }
- progress:nil
- success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
-
- NSLog(@"请求结果:%@",responseObject);
-
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil)
- [MBProgressHUD hideHUDForView:_view];
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
- NSInteger resultCode = [[jsonData valueForKey:K_APP_REQUEST_CODE] integerValue];
- NSString *strMessage = [jsonData valueForKey:K_APP_REQUEST_MSG];
-
- //成功
- if (resultCode == K_APP_REQUEST_SUCCESS_CODE) {
- if (successBack) {
- successBack([jsonData valueForKey:K_APP_REQUEST_DATA]);
- }
- }
- //token 失效,需重新登录
- else if(resultCode == K_APP_REQUEST_TOKEN_FAILURE_CODE){
- if (failureBack != nil) {
- failureBack(strMessage);
- }
-
- NSLog(@"登录Token 失效");
- [[NSNotificationCenter defaultCenter] postNotificationName:K_APP_TOKEN_FAILURE_NOTICE object:nil];
- }
- else{
- [MBProgressHUD showError:strMessage];
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- if (isLoading) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (_view != nil)
- [MBProgressHUD hideHUDForView:_view];
- else
- [MBProgressHUD hideHUD];
- });
- }
-
- if (failureBack != nil) {
- failureBack([error localizedDescription]);
- }
-
- NSLog(@"请求结果:%@",[error localizedDescription]);
- }];
- }
-
-
- /// 访问Bundle资源包中的图片
- /// - Parameters:
- /// - bclass: Bundle的class([self class]?可选)
- /// - bName: Bundle的名称
- /// - imgName: 带后缀的图片名 "xx.png"
- /// - _imgFileName: 图片资源所在文件夹名称,可选
- +(UIImage *_Nullable)imageForBuncleClass:(Class _Nullable)_bclass
- andBundleName:(NSString *_Nonnull)_bName
- withImageName:(NSString *_Nonnull)_imgName
- andImagesFileName:(NSString *_Nonnull)_imgFileName {
-
- UIImage *_img;
- @try {
- Class _class = _bclass;
- if(!_bclass){
- _class = NSClassFromString(_bName);
- }
-
- NSBundle *_bundle = [NSBundle bundleForClass:_class];
- NSURL *_url = [_bundle URLForResource:_bName withExtension:@"bundle"];
-
- NSString *_imgFN = _imgName;
- if(_imgFileName && ![_imgFileName isEqualToString:@""]) {
- _imgFN = [NSString stringWithFormat:@"%@/%@",_imgFileName,_imgName];
- }
-
- if (@available(iOS 13.0, *)) {
- NSBundle *_imageBundle = [NSBundle bundleWithURL:_url];
- _img = [UIImage imageNamed:_imgFN inBundle:_imageBundle withConfiguration:nil];
- } else {
- // Fallback on earlier versions
- NSString *_path = [NSString stringWithFormat:@"%@/%@",[_url path],_imgFN];
- _img = [UIImage imageWithContentsOfFile:_path];
- }
-
- } @catch (NSException *exception) {
- NSLog(@"%@-%@",@"imageForBuncleClass",exception);
- } @finally {
- return _img;
- }
- }
-
- /// 获取资源包里面的Xib
- /// - Parameters:
- /// - _bclass: Bundle的class([self class]可选)
- /// - _bName: Bundle的名称
- /// - _xibName: xib的名称
- -(UINib *_Nullable)xibForBuncleClass:(Class _Nullable)_bclass
- andBundleName:(NSString *_Nonnull)_bName
- withXibName:(NSString *_Nonnull)_xibName{
-
- UINib *nib;
- @try {
- Class _class = _bclass;
- if(!_bclass){
- _class = NSClassFromString(_bName);
- }
-
- NSBundle *_bundleClass = [NSBundle bundleForClass:_class];
- NSURL *_url = [_bundleClass URLForResource:_bName withExtension:@"bundle"];
- NSBundle *_bundle = [NSBundle bundleWithURL:_url];
- if(!_bundle) {
- _bundle = [NSBundle mainBundle];
- }
-
- nib = [UINib nibWithNibName:_xibName bundle:_bundle];
- } @catch (NSException *exception) {
- NSLog(@"%@-%@",@"xibForBuncleClass",exception);
- } @finally {
- return nib;
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。