Utils.m 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947
  1. //
  2. // Utils.m
  3. // UPayProject
  4. //
  5. // Created by 张建伟 on 15/1/6.
  6. // Copyright (c) 2015年 张建伟. All rights reserved.
  7. //
  8. #import "Utils.h"
  9. #import "CommonCrypto/CommonDigest.h"
  10. //#import "AFHTTPRequestOperation.h"
  11. #import "UIImage+Additions.h"
  12. #import <QuartzCore/QuartzCore.h>
  13. #import <Accelerate/Accelerate.h>
  14. #import "MBProgressHUD.h"
  15. #import <AVFoundation/AVFoundation.h>
  16. #import "UIImageView+WebCache.h"
  17. //#import "LoginModel.h"
  18. #import "MyColors.h"
  19. #import "MBProgressHUD+Add.h"
  20. #import "NSString+Additions.h"
  21. #import <CommonCrypto/CommonDigest.h>
  22. //#import "NewMessageModule.h"
  23. #import <sys/utsname.h>
  24. #import "Utils.h"
  25. #import "StitchingImage.h"
  26. @implementation Utils
  27. +(id)ifNullToNil:(id)objc
  28. {
  29. if ([objc isKindOfClass:[NSNull class]]) {
  30. return nil;
  31. }
  32. return objc;
  33. }
  34. + (NSDictionary *)DeviceInfo
  35. {
  36. BOOL allowPush = YES;
  37. if ([[UIDevice currentDevice].systemVersion doubleValue]>=8.0) {
  38. if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) {
  39. allowPush = YES;
  40. }else{
  41. allowPush = NO;
  42. }
  43. }else{
  44. if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes]!=UIRemoteNotificationTypeNone) {
  45. allowPush = YES;
  46. }else{
  47. allowPush = NO;
  48. }
  49. }
  50. NSString *devicemodel = [self DeviceModel];
  51. NSString *appversion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  52. NSString *iosversion = [UIDevice currentDevice].systemVersion;
  53. NSString *devicetoken = [userDefaults objectForKey:USERDEFAULT_APP_TOKEN];
  54. if (!devicetoken) {
  55. devicetoken = [NSUUID UUID].UUIDString;
  56. }
  57. NSDictionary *params = @{
  58. @"allowPush":@(allowPush),
  59. @"serverID":Server_ID,//String serverID -必填项,服务器ID
  60. @"clientType":@1,
  61. @"loginName":Login_Name,//String loginName -必填项,用户账号
  62. @"deviceToken":devicetoken,//String token -必填项,设备唯一标识,android端IMEI,ios端token;常规情况下,用于通知推送
  63. @"device":@"ios",
  64. @"pushToken":devicetoken,//String pushToken -必填项,设备通知推送token,特殊设备采用该字段推送通知,如华为机型;
  65. @"brand":@"Apple",//String brand -可选项,设备品牌
  66. @"model":devicemodel,//String model -可选项,设备型号
  67. @"password":Login_Word,
  68. @"serverID":Server_ID,
  69. @"version":[NSString stringWithFormat:@"%@-%@",iosversion,appversion]//String version -可选项,设备系统版本
  70. //String uuid -可选项,请求唯一标识
  71. };
  72. return params;
  73. }
  74. + (NSString*)DeviceModel{
  75. #warning 2016-09-26-缺失iphone7的model.
  76. struct utsname systemInfo;
  77. uname(&systemInfo);
  78. NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  79. //iPhone 系列
  80. if ([deviceModel isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
  81. if ([deviceModel isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
  82. if ([deviceModel isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
  83. if ([deviceModel isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
  84. if ([deviceModel isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
  85. if ([deviceModel isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
  86. if ([deviceModel isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
  87. if ([deviceModel isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
  88. if ([deviceModel isEqualToString:@"iPhone5,3"]) return @"iPhone 5C";
  89. if ([deviceModel isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
  90. if ([deviceModel isEqualToString:@"iPhone6,1"]) return @"iPhone 5S";
  91. if ([deviceModel isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
  92. if ([deviceModel isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
  93. if ([deviceModel isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
  94. if ([deviceModel isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
  95. if ([deviceModel isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
  96. return deviceModel;
  97. }
  98. +(UIBarButtonItem*)createRightbarbutton:(NSString*)title target:(id)target sel:(SEL)sel{
  99. // UIImage* image = [UIImage imageNamed:@"add_friend_clear"];
  100. // UIImage* image_down = [UIImage imageNamed:@"add_friend_clear_down"];
  101. UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 44)];
  102. [view setBackgroundColor:[UIColor clearColor]];
  103. UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
  104. if(isIOS7)
  105. {
  106. [button setFrame:CGRectMake(10, 8, 100, 28)];
  107. }
  108. else
  109. {
  110. [button setFrame:CGRectMake(0, 8, 100, 28)];
  111. }
  112. //设置字体大小
  113. button.titleLabel.font = [UIFont systemFontOfSize: 16.0];
  114. //设置标题颜色和状态
  115. [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  116. [button setTitleColor:[UIColor colorWithRed:(double)167/255.0f green:(double)169/255.0f blue:(double)171/255.0f alpha:1] forState:UIControlStateHighlighted];
  117. // [button.titleLabel setFont:[UIFont systemFontOfSize:14]];
  118. // [button setBackgroundImage:image forState:UIControlStateNormal];
  119. // [button setBackgroundImage:image_down forState:UIControlStateHighlighted];
  120. [button setTitle:title forState:UIControlStateNormal];
  121. //设置点击事件
  122. [button addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside];
  123. [view addSubview:button];
  124. //设置自定义bt
  125. UIBarButtonItem* msgLeft = [[UIBarButtonItem alloc] initWithCustomView:view];
  126. return msgLeft;
  127. }
  128. //创建右btbar的图标和点击事件
  129. +(UIBarButtonItem*)createRightbarbuttonWithIcon:(NSString*)imageName target:(id)target sel:(SEL)sel{
  130. {
  131. UIImage* image = [UIImage imageNamed:imageName];
  132. // UIImage* image_down = [UIImage imageNamed:@"add_friend_clear_down"];
  133. UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 44)];
  134. [view setBackgroundColor:[UIColor clearColor]];
  135. UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
  136. if(isIOS7)
  137. {
  138. [button setFrame:CGRectMake(40, 8, 50, 30)];
  139. }
  140. else
  141. {
  142. [button setFrame:CGRectMake(30, 8, 50, 30)];
  143. }
  144. button.titleLabel.font = [UIFont systemFontOfSize: 14.0];
  145. // [button.titleLabel setFont:[UIFont systemFontOfSize:14]];
  146. [button setImage:image forState:UIControlStateNormal];
  147. // [button setBackgroundImage:image_down forState:UIControlStateHighlighted];
  148. // [button setTitle:title forState:UIControlStateNormal];
  149. [button addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside];
  150. [view addSubview:button];
  151. UIBarButtonItem* msgLeft = [[UIBarButtonItem alloc] initWithCustomView:view];
  152. return msgLeft;
  153. }
  154. }
  155. //设备唯一标识
  156. +(NSString*) uuid {
  157. CFUUIDRef puuid = CFUUIDCreate( nil );
  158. CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
  159. NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
  160. CFRelease(puuid);
  161. CFRelease(uuidString);
  162. return result;
  163. }
  164. //创建一个透明的view 将它添加到 footView
  165. +(void)setExtraCellLineHidden: (UITableView *)tableView
  166. {
  167. UIView *view = [UIView new];
  168. view.backgroundColor = [UIColor clearColor];
  169. [tableView setTableFooterView:view];
  170. }
  171. +(void)addBack2Navigationitem:(UINavigationItem*)item sel:(SEL)sel res:(id)res{
  172. // UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 60, 44)];
  173. UIButton *backBtn = [[UIButton alloc] init];
  174. if(isIOS7)
  175. {
  176. backBtn.frame=CGRectMake(0, 7, 61, 30);
  177. }
  178. else
  179. {
  180. backBtn.frame=CGRectMake(10, 7, 61, 30);
  181. }
  182. [backBtn setImage:[UIImage imageNamed:@"nav_back.png"] forState:UIControlStateNormal];
  183. // [RightBtn setImage:[UIImage imageNamed:@"nav_back_down.png"] forState:UIControlStateHighlighted];
  184. // [RightBtn setTitle:@"返回" forState:UIControlStateNormal];
  185. [backBtn.titleLabel setFont:[UIFont systemFontOfSize:14]];
  186. [backBtn setTitleEdgeInsets:UIEdgeInsetsMake(5, -80, 5, 5)];
  187. [backBtn setImageEdgeInsets:UIEdgeInsetsMake(2, -30, 2, 15)];
  188. [backBtn setBackgroundColor:[UIColor clearColor]];
  189. [backBtn addTarget:res action:sel forControlEvents:UIControlEventTouchUpInside];
  190. // [view addSubview:RightBtn];
  191. UIBarButtonItem* left = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
  192. item.leftBarButtonItem = left;
  193. }
  194. +(BOOL)isValidEmail:(NSString*)email{
  195. //Email的验证规则
  196. NSString *stricterFilterString = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
  197. NSString *laxString = @".+@.+\\.[A-Za-z]{2}[A-Za-z]*";
  198. NSString *emailRegex = stricterFilterString ? stricterFilterString : laxString;
  199. NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
  200. return [emailTest evaluateWithObject:email];
  201. }
  202. + (BOOL)isMobileNumber:(NSString *)mobileNum
  203. {
  204. /**
  205. * 手机号码
  206. * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
  207. * 联通:130,131,132,152,155,156,185,186
  208. * 电信:133,1349,153,180,189
  209. */
  210. NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
  211. /**
  212. 10 * 中国移动:China Mobile
  213. 11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
  214. 12 */
  215. NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";
  216. /**
  217. 15 * 中国联通:China Unicom
  218. 16 * 130,131,132,152,155,156,185,186
  219. 17 */
  220. NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";
  221. /**
  222. 20 * 中国电信:China Telecom
  223. 21 * 133,1349,153,180,189
  224. 22 */
  225. NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$";
  226. /**
  227. 25 * 大陆地区固话及小灵通
  228. 26 * 区号:010,020,021,022,023,024,025,027,028,029
  229. 27 * 号码:七位或八位
  230. 28 */
  231. // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";
  232. NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
  233. NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
  234. NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
  235. NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
  236. if (([regextestmobile evaluateWithObject:mobileNum] == YES)
  237. || ([regextestcm evaluateWithObject:mobileNum] == YES)
  238. || ([regextestct evaluateWithObject:mobileNum] == YES)
  239. || ([regextestcu evaluateWithObject:mobileNum] == YES))
  240. {
  241. return YES;
  242. }
  243. else
  244. {
  245. return NO;
  246. }
  247. }
  248. #pragma mark -
  249. #pragma mark 等比縮放image
  250. //返回高度一致,不变形的图片.
  251. + (UIImage *)scaleRigthSizeImageWithTargetView:(UIView *)targetView origionlImage:(UIImage *)origionalImage
  252. {
  253. CGFloat transX = (targetView.frame.size.height/origionalImage.size.height)*origionalImage.size.width;
  254. return [self scaleToSize:origionalImage size:CGSizeMake(transX, targetView.frame.size.height)];
  255. #warning 2016-11-02 待新增不存在image,生成图片不存在或删除..
  256. }
  257. + (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
  258. {
  259. NSLog(@"%f, %f", image.size.width, image.size.height);
  260. UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize, image.size.height*scaleSize));
  261. [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
  262. UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
  263. UIGraphicsEndImageContext();
  264. return scaledImage;
  265. }
  266. + (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{
  267. // 创建一个bitmap的context
  268. // 并把它设置成为当前正在使用的context
  269. UIGraphicsBeginImageContext(size);
  270. // 绘制改变大小的图片
  271. [img drawInRect:CGRectMake(0, 0, size.width, size.height)];
  272. // 从当前context中创建一个改变大小后的图片
  273. UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
  274. // 使当前的context出堆栈
  275. UIGraphicsEndImageContext();
  276. // 返回新的改变大小后的图片
  277. return scaledImage;
  278. }
  279. + (UIImage *)creatImageWithPureColor:(UIColor *)color
  280. {
  281. CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
  282. UIGraphicsBeginImageContext(rect.size);
  283. CGContextRef context = UIGraphicsGetCurrentContext();
  284. CGContextSetFillColorWithColor(context, [color CGColor]);
  285. CGContextFillRect(context, rect);
  286. UIImage*theImage = UIGraphicsGetImageFromCurrentImageContext();
  287. UIGraphicsEndImageContext();
  288. return theImage;
  289. }
  290. + (CGSize)getSizeFromText:(NSString *)text maxWidth:(CGFloat)maxWidth withFloatFont:(float)floatFont
  291. {
  292. return [text stringgetSizebyMaxWidth:maxWidth Font:[UIFont systemFontOfSize:floatFont]];
  293. }
  294. +(NSString *)avatarPath
  295. {
  296. //通过key获取UserDefaults中的用户登录
  297. return [Utils avatarPathWithUserID:Login_Name];
  298. }
  299. +(NSString *)avatarPathWithLoginName:(NSString *)loginname{
  300. NSString *loginavatarpaths;
  301. loginavatarpaths = [Utils avatarPathWithUserID:loginname];
  302. return loginavatarpaths;
  303. }
  304. +(NSString *)avatarPathWithUserID:(NSString *)userID
  305. {
  306. //Document是对数据做一个持久化的保存 现在是获取Document
  307. NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  308. NSString *documentPath=[paths objectAtIndex:0];
  309. //创建路径地址
  310. documentPath = [documentPath stringByAppendingPathComponent:@"avatars"];
  311. //创建文件管理器
  312. NSFileManager* manager = [NSFileManager defaultManager];
  313. //判断是否是文件夹
  314. BOOL isDir;
  315. BOOL isEx = [manager fileExistsAtPath:documentPath isDirectory:&isDir];
  316. if (!isEx) {
  317. //如果不是文件夹 就创建 documentPath 文件
  318. [manager createDirectoryAtPath:documentPath withIntermediateDirectories:NO attributes:Nil error:nil];
  319. }
  320. documentPath = [documentPath stringByAppendingFormat:@"/%@_avatar.jpg",userID];
  321. //返回文件路径 也就是将用户的ID图片返回
  322. return documentPath;
  323. }
  324. //图片的下载缓存<头像>
  325. +(void)loadUserAvatar:(UIImageView *)headerImageView imageUrl:(NSString*) imageUrl
  326. {
  327. // headerImageView.image = DEFAULT_AVATAR;
  328. headerImageView.image = nil;
  329. [SDWebImageDownloader.sharedDownloader setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
  330. forHTTPHeaderField:@"Accept"];
  331. [headerImageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
  332. NSLog(@"%@",error);
  333. //设置头像
  334. if (headerImageView.image == nil) {
  335. // headerImageView.image = DEFAULT_AVATAR;
  336. }
  337. }];
  338. }
  339. + (void)getPCScreenPhotoAndTextWithExpression:(NSString *)expression content:(NSString *)content resultBlock:(void(^)(NSArray *subData))resultBlock
  340. {
  341. NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:nil];
  342. NSMutableArray *array3 = [NSMutableArray array];
  343. __block NSRange dealRange = NSMakeRange(0,0);
  344. [regex enumerateMatchesInString:content options:NSMatchingReportCompletion range:NSMakeRange(0, [content length]) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
  345. NSMutableArray *arrayx = [NSMutableArray array];
  346. for (int i = 0; i < [result numberOfRanges]; i++) {
  347. //以正则中的(),划分成不同的匹配部分
  348. NSString *component = [content substringWithRange:[result rangeAtIndex:i]];
  349. dealRange = [result rangeAtIndex:i];
  350. [arrayx addObject:component];
  351. }
  352. //判断是否到底.
  353. if (!arrayx.count && (content.length - (dealRange.length + dealRange.location)) > 0) {
  354. for (int j = 0; j < 4 ; j++) {
  355. if (j == 1) {
  356. NSString *restString = [content substringWithRange:NSMakeRange(dealRange.location + dealRange.length, content.length - (dealRange.location + dealRange.length))];
  357. [arrayx addObject:restString];
  358. }else [arrayx addObject:@""];
  359. }
  360. }
  361. if (arrayx.count) {
  362. [array3 addObject:arrayx];
  363. }
  364. }];
  365. if (resultBlock) {
  366. resultBlock(array3);
  367. }
  368. }
  369. //对图片的缓存和存储 使用了SDWebImage的缓存结果
  370. //+(void)loadMyAvatar:(UIImageView *)headerImageView
  371. //{
  372. // headerImageView.image = DEFAULT_AVATAR;
  373. // //判断文件夹是否存在 如果不存在 就下载并缓存
  374. // if (![FileManager fileExistsAtPath:[Utils avatarPath]]){
  375. //// headerImageView.image = DEFAULT_AVATAR;
  376. //
  377. //
  378. // NSString* imageUrl = [LoginModel curLoginUser].avatar;
  379. // [[SDWebImageDownloader sharedDownloader]downloadImageWithURL:[NSURL URLWithString:imageUrl] options:(SDWebImageDownloaderContinueInBackground) progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
  380. //
  381. // if ([data writeToFile:[Utils avatarPath] atomically:YES]) {
  382. // //图片从数据中获取
  383. // UIImage *avater = [UIImage imageWithData:data];
  384. // headerImageView.image = avater;
  385. // }
  386. //
  387. // }];
  388. // }else{
  389. //
  390. // //如果文件夹存在 就直接从文件中获取图片
  391. // UIImage *avater = [UIImage imageWithContentsOfFile:[Utils avatarPath]];
  392. // headerImageView.image = avater;
  393. // }
  394. //
  395. //}
  396. //+(void)loadMyAvatarWithPath:(UIImageView *)headerImageView :(NSString*)Paths
  397. //{
  398. // headerImageView.image = DEFAULT_AVATAR;
  399. // //判断文件夹是否存在 如果不存在 就下载并缓存
  400. // if (![FileManager fileExistsAtPath:[Utils avatarPath]]) {
  401. // // headerImageView.image = DEFAULT_AVATAR;
  402. //
  403. //
  404. // NSString* imageUrl = [LoginModel curLoginUser].avatar;
  405. // [[SDWebImageDownloader sharedDownloader]downloadImageWithURL:[NSURL URLWithString:imageUrl] options:(SDWebImageDownloaderContinueInBackground) progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
  406. //
  407. // if ([data writeToFile:[Utils avatarPath] atomically:YES]) {
  408. // //图片从数据中获取
  409. // UIImage *avater = [UIImage imageWithData:data];
  410. // headerImageView.image = avater;
  411. // }
  412. //
  413. // }];
  414. // }else{
  415. //
  416. // //如果文件夹存在 就直接从文件中获取图片
  417. // UIImage *avater = [UIImage imageWithContentsOfFile:[Utils avatarPath]];
  418. // headerImageView.image = avater;
  419. // }
  420. //
  421. //}
  422. //压缩图片
  423. +(NSData*)getScaledPhotoData:(UIImage*) theImage
  424. {
  425. NSData* photoData;
  426. //将图片进行处理<等比缩放 0.4>
  427. UIImage *image = [self scaleImage:theImage toScale:0.5];
  428. //对图片进行JPEG格式的压缩
  429. photoData = UIImageJPEGRepresentation(image, (CGFloat)0.5);
  430. return photoData;
  431. }
  432. /*
  433. //下一次新增一个直接通过defaultavaer返回image
  434. + (UIImage *)getDefaultAvatarWithUserUUID:(NSString *)uuid isOffLine:(BOOL)isoffline
  435. {
  436. // AddrBook *addrbook = nil;
  437. NSArray *userArray = nil;
  438. //选择自己还是friend
  439. //
  440. userArray = [uuid componentsSeparatedByString:@"-"];
  441. NSPredicate *predicte = [NSPredicate predicateWithFormat:@"serverID==%@ AND loginName==%@",userArray[0],userArray[1]];
  442. AddrBook *addrbook = [AddrBook fetchEntityByLoginName:userArray[1] serverID:userArray[0]];
  443. //数据库被手动删除的情况下。。。
  444. if (!addrbook) {
  445. //创建实体对象
  446. addrbook = [[NewMessageModule shareInstance]p_fetchAddrBookForReceivedMessage:uuid];;
  447. }
  448. if (addrbook.defaultAvatar) {
  449. //获取默认头像
  450. NSString *defaultAvatar = addrbook.defaultAvatar;
  451. NSArray *defaultAvatarArray = [defaultAvatar componentsSeparatedByString:@","];
  452. if (defaultAvatarArray.count == 2) {
  453. addrbook.defaultAvatar = [defaultAvatar substringWithRange:NSMakeRange(0, 1)];
  454. }
  455. int colorNum = [addrbook.defaultAvatar intValue];
  456. // int colorNum = [defaultAvatarArray[0]intValue];
  457. NSString *lastName = nil;
  458. //过滤空格.
  459. NSString *disPlayName = [addrbook.disPlayName stringByReplacingOccurrencesOfString:@" " withString:@""];
  460. if (disPlayName.length >= 3) {
  461. lastName = [disPlayName substringWithRange:NSMakeRange(disPlayName.length - 2, 2)];
  462. }else lastName = disPlayName;
  463. // NSString *lastName = addrbook.disPlayName;
  464. // lastName = [lastName stringByAppendingString:[NSString stringWithFormat:@"%@",lastName]];
  465. MyColors *colors = [[MyColors alloc]init];
  466. UIColor *defaultHeaderImageColor = colors.arrayColor[colorNum];
  467. if (isoffline) {
  468. defaultHeaderImageColor = colors.offlineColors[colorNum];
  469. }
  470. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  471. NSManagedObjectContext *privateContext= [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
  472. [privateContext MR_saveToPersistentStoreAndWait];
  473. });
  474. return [self createImageByLastName:lastName bgColor:defaultHeaderImageColor];
  475. }else
  476. {
  477. MyColors *colors = [[MyColors alloc]init];
  478. //创建并存储
  479. int randomColorCount = arc4random()%(colors.arrayColor.count);
  480. addrbook.defaultAvatar = [NSString stringWithFormat:@"%d",randomColorCount];
  481. UIColor *bgColor = colors.arrayColor[randomColorCount];
  482. if (isoffline) {
  483. bgColor = colors.offlineColors[randomColorCount];
  484. }
  485. //对数据是否为空进行判断
  486. // NSString *checklasName = addrbook.disPlayName;
  487. // if ([checklasName isEqualToString:@""]) {
  488. // addrbook.disPlayName = @"空";
  489. // }
  490. //
  491. // NSString *lastName = [addrbook.disPlayName substringToIndex:1];
  492. //
  493. // if (lastName) {
  494. //
  495. // addrbook.defaultAvatar = [NSString stringWithFormat:@"%d,%@",randomColorCount,lastName];
  496. //
  497. // [defaultContext MR_saveToPersistentStoreAndWait];
  498. // }else lastName = @"";
  499. NSString *lastName = nil;
  500. if (addrbook.disPlayName.length >= 3) {
  501. lastName = [addrbook.disPlayName substringWithRange:NSMakeRange(addrbook.disPlayName.length - 2, 2)];
  502. }else lastName = addrbook.disPlayName;
  503. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  504. NSManagedObjectContext *privateContext= [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
  505. [privateContext MR_saveToPersistentStoreAndWait];
  506. });
  507. return [self createImageByLastName:lastName bgColor:bgColor];
  508. }
  509. }
  510. */
  511. #warning 2016-12-15 待优化.
  512. /*
  513. + (UIImage *)getGroupHeaderImageWithGroup:(UserGroupObject *)group
  514. {
  515. NSMutableArray *imageViews = [NSMutableArray array];
  516. NSArray *users = nil;
  517. if(group.members.count <= 9)
  518. {
  519. users = group.members;
  520. }else if(group.members.count > 9)
  521. {
  522. users = [group.members subarrayWithRange:NSMakeRange(0, 9)];
  523. }
  524. for (NSDictionary *memberDict in users) {
  525. AddrBook *userAddrBook = [[NewMessageModule shareInstance]p_fetchAddrBookForReceivedMessage:[memberDict[@"id"] stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@",ContentServerID(USERDEFAULT_ContentServer)] withString:@""]];
  526. //{alias =""; id = "0578+002682BECE10-xxj"; ts = '';}
  527. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
  528. [imageView sd_setImageWithURL:[NSURL URLWithString:userAddrBook.avatar] placeholderImage:[Utils getDefaultAvatarWithUserUUID:[memberDict[@"id"] stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@",ContentServerID(USERDEFAULT_ContentServer)] withString:@""] isOffLine:NO]];
  529. [imageViews addObject:imageView];
  530. }
  531. #warning bug2016-10-26 bug之群组头像首次启动有时候不对.解散群组没有被删掉...
  532. UIImageView *canvasView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];
  533. canvasView.backgroundColor = [UIColor colorWithWhite:0.839 alpha:1.000];
  534. UIImageView *imageView = [[StitchingImage alloc] stitchingOnImageView:canvasView withImageViews:imageViews];
  535. imageView.frame = CGRectMake(0, 0, 60, 60);
  536. return [Utils imageWithView:imageView];
  537. }
  538. */
  539. /*
  540. + (UIImage *)getGroupHeaderImageWithGroupWithObject:(UserGroupObject *)group
  541. {
  542. NSMutableArray *imageViews = [NSMutableArray array];
  543. NSArray *users = nil;
  544. if(group.members.count <= 9)
  545. {
  546. users = group.members;
  547. }else if(group.members.count > 9)
  548. {
  549. users = [group.members subarrayWithRange:NSMakeRange(0, 9)];
  550. }
  551. for (NSDictionary *memberDict in users) {
  552. AddrBook *userAddrBook = [[NewMessageModule shareInstance]p_fetchAddrBookForReceivedMessage:[memberDict[@"id"] stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@",ContentServerID(USERDEFAULT_ContentServer)] withString:@""]];
  553. //{alias =""; id = "0578+002682BECE10-xxj"; ts = '';}
  554. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
  555. [imageView sd_setImageWithURL:[NSURL URLWithString:userAddrBook.avatar] placeholderImage:[Utils getDefaultAvatarWithUserUUID:[memberDict[@"id"] stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@",ContentServerID(USERDEFAULT_ContentServer)] withString:@""] isOffLine:NO]];
  556. [imageViews addObject:imageView];
  557. }
  558. #warning bug2016-10-26 bug之群组头像首次启动有时候不对.解散群组没有被删掉...
  559. UIImageView *canvasView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];
  560. canvasView.backgroundColor = [UIColor colorWithWhite:0.839 alpha:1.000];
  561. UIImageView *imageView = [[StitchingImage alloc] stitchingOnImageView:canvasView withImageViews:imageViews];
  562. imageView.frame = CGRectMake(0, 0, 60, 60);
  563. return [Utils imageWithView:imageView];
  564. }
  565. */
  566. /*
  567. + (UIImageView *)getGroupHeaderImageViewWithGroupWithObject:(UserGroupObject *)group
  568. {
  569. NSMutableArray *imageViews = [NSMutableArray array];
  570. NSArray *users = nil;
  571. if(group.members.count <= 9)
  572. {
  573. users = group.members;
  574. }else if(group.members.count > 9)
  575. {
  576. users = [group.members subarrayWithRange:NSMakeRange(0, 9)];
  577. }
  578. for (NSDictionary *memberDict in users) {
  579. AddrBook *userAddrBook = [[NewMessageModule shareInstance]p_fetchAddrBookForReceivedMessage:[memberDict[@"id"] stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@",ContentServerID(USERDEFAULT_ContentServer)] withString:@""]];
  580. //{alias =""; id = "0578+002682BECE10-xxj"; ts = '';}
  581. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
  582. [imageView sd_setImageWithURL:[NSURL URLWithString:userAddrBook.avatar] placeholderImage:[Utils getDefaultAvatarWithUserUUID:[memberDict[@"id"] stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@",ContentServerID(USERDEFAULT_ContentServer)] withString:@""] isOffLine:NO]];
  583. [imageViews addObject:imageView];
  584. }
  585. #warning bug2016-10-26 bug之群组头像首次启动有时候不对.解散群组没有被删掉...
  586. UIImageView *canvasView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];
  587. canvasView.backgroundColor = [UIColor colorWithWhite:0.839 alpha:1.000];
  588. UIImageView *imageView = [[StitchingImage alloc] stitchingOnImageView:canvasView withImageViews:imageViews];
  589. imageView.frame = CGRectMake(0, 0, 60, 60);
  590. return imageView;
  591. }
  592. */
  593. + (UIImage *) imageWithView:(UIView *)view
  594. {
  595. UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]);
  596. [view.layer renderInContext:UIGraphicsGetCurrentContext()];
  597. UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
  598. UIGraphicsEndImageContext();
  599. return img;
  600. }
  601. //合并文字和image.
  602. + (UIImage *)createImageByLastName:(NSString *)lastName bgColor:(UIColor *)Color
  603. {
  604. UIImage *image = [MyColors createImageWithColor:Color];
  605. // image.size = CGSizeMake(HEAD_SIZE, HEAD_SIZE);
  606. CGFloat w = image.size.width;
  607. CGFloat h = image.size.height;
  608. //
  609. CGSize size= CGSizeMake (w , h ); // 画布大小
  610. UIGraphicsBeginImageContextWithOptions (size, NO , 0.0 );
  611. [image drawAtPoint : CGPointMake ( 0 , 0 )];
  612. // 获得一个位图图形上下文
  613. CGContextRef context= UIGraphicsGetCurrentContext ();
  614. CGContextDrawPath (context, kCGPathStroke );
  615. CGSize lastNameSize = [lastName sizeWithFont:[UIFont systemFontOfSize:14]];
  616. // 30 , image. size . height * 0.65
  617. [lastName drawAtPoint : CGPointMake ( w/2.0f - lastNameSize.width/2.0f, h/2.0f - lastNameSize.height/2.0f) withAttributes : @{ NSFontAttributeName :[ UIFont systemFontOfSize:14], NSForegroundColorAttributeName :[ UIColor whiteColor ] } ];
  618. UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext ();
  619. UIGraphicsEndImageContext ();
  620. return newImage;
  621. }
  622. + (void) netWorkType:(void(^)(AFNetworkReachabilityStatus status))success_block fail:(void(^)())fail_block
  623. {
  624. [[AFNetworkReachabilityManager sharedManager]startMonitoring];
  625. [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  626. if(status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi)
  627. {
  628. success_block(status);
  629. }else fail_block();
  630. [[AFNetworkReachabilityManager sharedManager]stopMonitoring];
  631. }];
  632. }
  633. + (BOOL)isEnableNetWork
  634. {
  635. return ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus] != NotReachable);
  636. }
  637. + (NSMutableArray *)sortArray:(NSMutableArray *)orinalArray FromIndex:(NSUInteger)fromIndex ToIndex:(NSUInteger)toIndex
  638. {
  639. //冒泡排序法
  640. return nil;
  641. }
  642. + (NSString *)getIconWithFileName:(NSString *)fileName
  643. {
  644. NSArray *fileTypeArray = [fileName componentsSeparatedByString:@"."];
  645. NSString *fileType = nil;
  646. if (fileTypeArray.count >= 2) {
  647. //
  648. fileType = fileTypeArray[fileTypeArray.count - 1];
  649. if ([fileType isEqualToString:@"doc"] || [fileType isEqualToString:@"docx"] || [fileType isEqualToString:@"DOC"] || [fileType isEqualToString:@"DOCX"]) {
  650. fileType = @"doc_file";
  651. }else if ([fileType isEqualToString:@"mp3"] || [fileType isEqualToString:@"wav"] || [fileType isEqualToString:@"amr"]||[fileType isEqualToString:@"MP3"] || [fileType isEqualToString:@"WAV"] || [fileType isEqualToString:@"AMR"])
  652. {
  653. fileType = @"mp3_file";
  654. }else if ([fileType isEqualToString:@
  655. "vedio"] || [fileType isEqualToString:@"mp4"] || [fileType isEqualToString:@"avi"] || [fileType isEqualToString:@"wmv"] || [fileType isEqualToString:@"mov"]||[fileType isEqualToString:@"MP4"] || [fileType isEqualToString:@"AVI"] || [fileType isEqualToString:@"WMV"] || [fileType isEqualToString:@"MOV"])
  656. {
  657. fileType = @"vedio_file";
  658. }else if ([fileType isEqualToString:@"zip"]||[fileType isEqualToString:@"rar"]||[fileType isEqualToString:@"ZIP"]||[fileType isEqualToString:@"RAR"])
  659. {
  660. fileType = @"zip_file";
  661. }else if ([fileType isEqualToString:@"xlsx"] || [fileType isEqualToString:@"xls"]||[fileType isEqualToString:@"XLSX"] || [fileType isEqualToString:@"XLS"])
  662. {
  663. fileType = @"xlsx_file";
  664. }else if ([fileType isEqualToString:@"txt"]||[fileType isEqualToString:@"TXT"])
  665. {
  666. fileType = @"txt_file";
  667. }else if([fileType isEqualToString:@"pptx"] || [fileType isEqualToString:@"ppt"] || [fileType isEqualToString:@"pdf"]||[fileType isEqualToString:@"PPTX"] || [fileType isEqualToString:@"PPT"] || [fileType isEqualToString:@"PDF"])
  668. {
  669. fileType = @"pptx_file";
  670. }else{
  671. fileType = @"unknow_file";
  672. }
  673. }else fileType = @"unknow_file";
  674. return fileType;
  675. }
  676. + (void)showSuccessToView:(UIView *)view
  677. {
  678. [MBProgressHUD hideHUDForView:view animated:NO];
  679. [MBProgressHUD showSuccess:nil toView:view];
  680. }
  681. + (void)showFailureToView:(UIView *)view
  682. {
  683. [MBProgressHUD hideHUDForView:view animated:NO];
  684. [MBProgressHUD showError:@"失败" toView:view];
  685. }
  686. + (void)showError:(NSString *)error toView:(UIView *)view finish:(void(^)())block
  687. {
  688. [MBProgressHUD hideHUDForView:view animated:NO];;
  689. [MBProgressHUD showError:error toView:view];
  690. CGFloat delayTime = MIN((float)error.length*0.06 + 0.5, 5.0);
  691. if (block) {
  692. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  693. block();
  694. });
  695. }
  696. }
  697. + (void)showSuccess:(NSString *)success toView:(UIView *)view finish:(void(^)())block
  698. {
  699. [MBProgressHUD hideHUDForView:view animated:NO];
  700. [MBProgressHUD showSuccess:success toView:view];
  701. CGFloat delayTime = MIN((float)success.length*0.06 + 0.5, 5.0);
  702. if (block) {
  703. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  704. block();
  705. });
  706. }
  707. }
  708. + (void)showError:(NSString *)error ToView:(UIView *)view
  709. {
  710. [MBProgressHUD hideHUDForView:view animated:NO];
  711. [MBProgressHUD showError:error toView:view];
  712. }
  713. + (void)showWaitingToView:(UIView *)view
  714. {
  715. [MBProgressHUD hideHUDForView:view animated:NO];
  716. [MBProgressHUD showMessag:nil toView:view];
  717. }
  718. + (void)showWaitingWithMessage:(NSString *)message ToView:(UIView *)view
  719. {
  720. [MBProgressHUD hideHUDForView:view animated:NO];
  721. [MBProgressHUD showMessag:message toView:view];
  722. }
  723. + (void)HiddenWaitingToView:(UIView *)view
  724. {
  725. [MBProgressHUD hideHUDForView:view animated:YES];
  726. }
  727. @end