NewUtils.m 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396
  1. //
  2. // NewUtils.m
  3. // MingMen
  4. //
  5. // Created by 罗云飞 on 2017/3/9.
  6. // Copyright © 2017年 罗云飞. All rights reserved.
  7. //
  8. #import "NewUtils.h"
  9. #import <CommonCrypto/CommonDigest.h>
  10. #import <UIKit/UIKit.h>
  11. #import <math.h>
  12. #import <net/if.h>
  13. #import <net/if_dl.h>
  14. #import <mach/mach.h>
  15. #import <mach/mach_host.h>
  16. #import <sys/socket.h>
  17. #import <sys/sysctl.h>
  18. #import <sys/types.h>
  19. #import <ifaddrs.h>
  20. #include <arpa/inet.h>
  21. #include <netdb.h>
  22. #include <net/if.h>
  23. #include <ifaddrs.h>
  24. #import <dlfcn.h>
  25. #import <SystemConfiguration/SystemConfiguration.h>
  26. #import <sys/utsname.h>
  27. @implementation NewUtils
  28. /*
  29. static NSString* gAccount = @"";//账号
  30. static NSString* gPassword = @"";//密码
  31. static NSString* gAuthorid = @"";//账号ID
  32. static NSString* gUserName = @"";//用户名称
  33. static NSString* gUserHeadImage = @"";//用户头像
  34. static NSString* gUdid = @"";//UDID
  35. static NSString* gAppkey = @"";//appkey
  36. static NSString* gReg_time = @"";//注册时间
  37. static NSString* gMobile_phone = @"";//手机号
  38. static NSString* gShoppingCartNumber = @"0";//购物车数量
  39. static BOOL gShoppingCartFlag = NO;
  40. */
  41. static NSString* gPGCCert = @"";//PGC认证才可以选择专辑 0、未认证 1、已认证
  42. //是否PGC认证
  43. +(void)setPGCCert:(NSString*)pgcCert
  44. {
  45. gPGCCert = pgcCert;
  46. }
  47. +(NSString*)getPGCCert
  48. {
  49. return gPGCCert;
  50. }
  51. /*
  52. //用户名称
  53. +(void)setUserName:(NSString*)userName
  54. {
  55. gUserName = userName;
  56. }
  57. +(NSString*)getUserName
  58. {
  59. return gUserName;
  60. }
  61. //用户头像
  62. +(void)setUserHeadImage:(NSString*)userHeadImage
  63. {
  64. gUserHeadImage = userHeadImage;
  65. }
  66. +(NSString*)getUserHeadImage
  67. {
  68. return gUserHeadImage;
  69. }
  70. //账号
  71. +(void)setAccount:(NSString*)account
  72. {
  73. gAccount = account;
  74. }
  75. +(NSString*)getAccount
  76. {
  77. return gAccount;
  78. }
  79. //密码
  80. +(void)setPassword:(NSString*)password
  81. {
  82. gPassword = password;
  83. }
  84. +(NSString*)getPassword
  85. {
  86. return gPassword;
  87. }
  88. //账号ID
  89. +(void)setAuthorid:(NSString*)authorid
  90. {
  91. gAuthorid = authorid;
  92. }
  93. +(NSString*)getAuthorid
  94. {
  95. return gAuthorid;
  96. }
  97. //UDID
  98. +(void)set_UDID:(NSString*)udid
  99. {
  100. gUdid = udid;
  101. }
  102. + (NSString*)get_UDID
  103. {
  104. return gUdid;//
  105. }
  106. //验证码
  107. +(void)set_Appkey:(NSString *)appkey
  108. {
  109. gAppkey = appkey;
  110. }
  111. +(NSString*)get_Appkey
  112. {
  113. return gAppkey;
  114. }
  115. //注册时间
  116. +(void)set_reg_time:(NSString *)time
  117. {
  118. gReg_time = time;
  119. }
  120. +(NSString*)get_reg_time
  121. {
  122. return gReg_time;
  123. }
  124. //手机号
  125. +(void)set_mobile_phone:(NSString *)phone
  126. {
  127. gMobile_phone = phone;
  128. }
  129. +(NSString*)get_mobile_phone
  130. {
  131. return gMobile_phone;
  132. }
  133. //购物车数量
  134. +(void)setShoppingCartNumber:(NSString *)number
  135. {
  136. gShoppingCartNumber = number;
  137. }
  138. +(NSString *)getShoppingCartNumber
  139. {
  140. return gShoppingCartNumber;
  141. }
  142. //购物车跳转登录
  143. +(void)setShoppingCartLogin:(BOOL)flag
  144. {
  145. gShoppingCartFlag = flag;
  146. }
  147. +(BOOL)getShoppingCartLogin
  148. {
  149. return gShoppingCartFlag;
  150. }
  151. //农博汇项目请求接口的实时时间
  152. + (NSString *)get_req_time
  153. {
  154. //年月日时分秒毫秒
  155. NSTimeInterval curTime = [[NSDate date] timeIntervalSince1970];
  156. double dtime = (double)curTime;
  157. NSDateFormatter* format = [[NSDateFormatter alloc] init];
  158. [format setDateFormat:@"yyyyMMddHHmmss"];
  159. NSString* timeString = [format stringFromDate:[NSDate dateWithTimeIntervalSince1970:dtime]];
  160. // NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
  161. // NSTimeInterval a=[dat timeIntervalSince1970]*1000;
  162. // NSString *timeString = [NSString stringWithFormat:@"%f", a];////转为字符型
  163. // NSDate *date = [NSDate date];
  164. // NSString *timeString = [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
  165. return timeString;
  166. }
  167. //公用接口的请求时间
  168. +(NSString*)get_publicInterface_time
  169. {
  170. NSDate *date = [NSDate date];
  171. return [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
  172. }
  173. */
  174. /*验证正则表达式*/
  175. + (BOOL)matchRegularExpression:(NSString*)text match:(NSString*)match
  176. {
  177. NSError *error;
  178. NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:match options:0 error:&error];
  179. if (regex != nil)
  180. {
  181. NSTextCheckingResult *firstMatch = [regex firstMatchInString:text options:0 range:NSMakeRange(0, [text length])];
  182. if (firstMatch)
  183. {
  184. return YES;
  185. }
  186. }
  187. return NO;
  188. }
  189. /**
  190. @method 获取指定宽度width,字体大小fontSize,字符串value的高度
  191. @param value 待计算的字符串
  192. @param fontSize 字体的大小
  193. @param width 限制字符串显示区域的宽度
  194. @result float 返回的高度
  195. */
  196. + (CGFloat) heightforString:(NSString *)value andWidth:(CGFloat)width fontSize:(CGFloat)fontSize{
  197. return [value boundingRectWithSize:CGSizeMake(width, 1000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:fontSize] forKey:NSFontAttributeName] context:nil].size.height;
  198. }
  199. + (CGFloat) heightforString:(NSString *)value andHeight:(CGFloat)height fontSize:(CGFloat)fontSize{
  200. return [value boundingRectWithSize:CGSizeMake(100000, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:fontSize] forKey:NSFontAttributeName] context:nil].size.width;
  201. }
  202. + (CGFloat) heightforString:(NSString *)value andHeight:(CGFloat)height XfontSize:(CGFloat)XfontSize{
  203. return [value boundingRectWithSize:CGSizeMake(100000, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont boldSystemFontOfSize:XfontSize] forKey:NSFontAttributeName] context:nil].size.width;
  204. }
  205. + (CGFloat) heightforString:(NSString *)value andWidth:(CGFloat)width AutofontSize:(CGFloat)AutofontSize{
  206. return [value boundingRectWithSize:CGSizeMake(width, 1000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:NewAutoFont(AutofontSize) forKey:NSFontAttributeName] context:nil].size.height;
  207. }
  208. + (CGFloat) heightforString:(NSString *)value andHeight:(CGFloat)height AutofontSize:(CGFloat)AutofontSize{
  209. return [value boundingRectWithSize:CGSizeMake(100000, height) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:NewAutoFont(AutofontSize) forKey:NSFontAttributeName] context:nil].size.width;
  210. }
  211. +(BOOL)luhn:(NSString*)bank//for checkBankCard
  212. {
  213. int s1 = 0;
  214. int s2 = 0;
  215. NSString* reverse = [NewUtils reverseString:bank];
  216. NSInteger length = reverse.length;
  217. NSRange range;
  218. for (int i=0; i<length; i++)
  219. {
  220. range = NSMakeRange (i, 1);
  221. int digit = [[reverse substringWithRange:range] intValue];
  222. if(i % 2 == 0)//this is for odd digits, they are 1-indexed in the algorithm
  223. {
  224. s1 += digit;
  225. }
  226. else//add 2 * digit for 0-4, add 2 * digit - 9 for 5-9
  227. {
  228. s2 += 2 * digit;
  229. if(digit >= 5)
  230. {
  231. s2 -= 9;
  232. }
  233. }
  234. }
  235. return (s1 + s2) % 10 == 0;
  236. }
  237. +(NSString*)reverseString:(NSString*)str
  238. {
  239. NSUInteger len = [str length];
  240. NSMutableString *reverse = [NSMutableString stringWithCapacity:len];
  241. while(len>0)
  242. {
  243. //从后取一个字符
  244. unichar c = [str characterAtIndex:--len];
  245. NSString *s = [NSString stringWithFormat:@"%C",c];
  246. [reverse appendString:s];
  247. }
  248. return reverse;
  249. }
  250. /*银行卡号码验证*/
  251. +(BOOL)checkBankCard:(NSString*)bank
  252. {
  253. NSString* mach = @"^(^\\d{16}$|^\\d{19}$)$";
  254. if (bank.length <= 0 || ![NewUtils matchRegularExpression:bank match:mach])
  255. {
  256. return NO;
  257. }
  258. return [NewUtils luhn:bank];
  259. }
  260. /*身份证的判断*/
  261. +(BOOL)checkIdentity:(NSString*)identity
  262. {
  263. if (identity.length <= 0)
  264. {
  265. return false;
  266. }
  267. if([NewUtils checkCid:identity] == 0)
  268. {
  269. return true;
  270. }
  271. return false;
  272. }
  273. +(int) checkCid:(NSString*)identity
  274. {
  275. /**
  276. * 0:合法 1:非法格式 2:非法地区 3:非法生日 4:非法校验
  277. * */
  278. NSString* match = @"^(^\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";
  279. if (![NewUtils matchRegularExpression:identity match:match])
  280. {
  281. return 1;
  282. }
  283. //NSArray* areas = [NSArray arrayWithObjects:@"", @"安微",@"",nil];
  284. NSArray* areas = [NSArray arrayWithObjects:@"", @"", @"", @"", @"", @"", @"", @"", @"", @"", @"", @"北京", @"天津", @"河北", @"山西", @"内蒙古", @"", @"",@"", @"", @"", @"辽宁", @"吉林", @"黑龙江", @"", @"", @"", @"", @"", @"", @"", @"上海", @"江苏", @"浙江", @"安微", @"福建", @"江西", @"山东", @"", @"",@"", @"河南", @"湖北", @"湖南", @"广东", @"广西", @"海南", @"", @"", @"", @"重庆", @"四川", @"贵州", @"云南", @"西藏", @"", @"", @"", @"", @"", @"", @"陕西",@"甘肃", @"青海", @"宁夏", @"新疆", @"", @"", @"", @"", @"", @"台湾", @"", @"", @"", @"", @"", @"", @"", @"", @"", @"香港", @"澳门", @"",@"", @"", @"", @"", @"", @"", @"", @"国外", @"", @"", @"", @"", @"", @"", @"", @"", nil];
  285. // 地区
  286. NSRange range = NSMakeRange (0, 2);
  287. int areacode = [[identity substringWithRange:range] intValue];
  288. NSString* string = [areas objectAtIndex:areacode];
  289. if (string.length == 0)
  290. {
  291. return 2;
  292. }
  293. // 生日
  294. NSString* dateStrSrc = nil;
  295. if (identity.length == 18)
  296. {
  297. range = NSMakeRange (6, 8);
  298. dateStrSrc = [identity substringWithRange:range];
  299. }
  300. else
  301. {
  302. range = NSMakeRange (6, 6);
  303. dateStrSrc = [NSString stringWithFormat:@"%d%@",19,[identity substringWithRange:range]];
  304. }
  305. //range = NSMakeRange (0, 4);
  306. // NSString* str = [dateStrSrc substringWithRange:range];
  307. //range = NSMakeRange (4, 2);
  308. NSString* str1 = nil;//[dateStrSrc substringWithRange:range];
  309. //range = NSMakeRange (6, 2);
  310. NSString* str2 = nil;//[dateStrSrc substringWithRange:range];
  311. //NSString* dateStr = [NSString stringWithFormat:@"%@-%@-%@",str,str1,str2];
  312. // 校验位比对
  313. if (identity.length == 18)
  314. {
  315. NSMutableArray* wi = [NSMutableArray arrayWithCapacity:17];
  316. for (int i=0; i<17; i++)
  317. {
  318. int k = pow(2,(17-i));
  319. int v = k % 11;
  320. str2 = [NSString stringWithFormat:@"%d",v];
  321. [wi addObject:str2];
  322. }
  323. int sum = 0;
  324. int t = 0;
  325. int t2 = 0;
  326. // 进行加权求和
  327. for (int i = 0; i < 17; i++)
  328. {
  329. range = NSMakeRange (i, 1);
  330. t = [[identity substringWithRange:range] intValue];
  331. t2 = [[wi objectAtIndex:i] intValue];
  332. sum += t * t2;
  333. }
  334. // 取模运算,得到模值
  335. int code = sum % 11;
  336. NSString* checkCode = @"10X98765432";
  337. range = NSMakeRange (code, 1);
  338. NSString* check = [checkCode substringWithRange:range];
  339. range = NSMakeRange (17, 1);
  340. str1 = [identity substringWithRange:range];
  341. if (NSOrderedSame != [str1 compare:check options:NSCaseInsensitiveSearch])
  342. {
  343. return 4;
  344. }
  345. }
  346. // 男女
  347. if (identity.length == 18)
  348. {
  349. range = NSMakeRange (16, 1);
  350. str1 = [identity substringWithRange:range];
  351. if ([str1 intValue]%2 == 1)
  352. {
  353. //NSLog(@"sex = 男");
  354. }
  355. else
  356. {
  357. //NSLog(@"sex = 女");
  358. }
  359. }
  360. else
  361. {
  362. range = NSMakeRange (13, 1);
  363. str1 = [identity substringWithRange:range];
  364. if ([str1 intValue]%2 == 1)
  365. {
  366. //NSLog(@"sex = 男");
  367. }
  368. else
  369. {
  370. //NSLog(@"sex = 女");
  371. }
  372. }
  373. return 0;
  374. }
  375. +(BOOL)checkMobilePhone:(NSString*) mobilePhone
  376. {
  377. if (mobilePhone.length <= 0)
  378. {
  379. return NO;
  380. }else if (mobilePhone.length == 11)
  381. {
  382. return YES;
  383. }
  384. if (mobilePhone.length <= 0)
  385. {
  386. return NO;
  387. }
  388. NSArray * mobilePhoneStarts = [NSArray arrayWithObjects:@"106|移动", @"130|联通", @"131|联通", @"132|联通", @"133|电信", @"134|移动", @"135|移动", @"136|移动", @"137|移动", @"138|移动", @"139|移动",@"145|联通", @"147|移动", @"150|移动", @"152|移动", @"153|电信", @"155|联通", @"156|联通", @"157|移动", @"158|移动", @"159|移动",@"180|电信", @"181|电信", @"182|移动", @"183|移动",@"184|移动", @"185|联通", @"186|联通", @"187|移动", @"188|移动", @"189|电信",@"151|移动",@"177|电信",nil];
  389. NSString* regex1MobilePhone = @"^\\d{11}$";
  390. NSString* regex2MobilePhone = @"^(86)\\d{11}$";
  391. NSString* regex3MobilePhone = @"^(\\+86)\\d{11}$";
  392. NSRange range = NSMakeRange (0, 3);
  393. if ([NewUtils matchRegularExpression:mobilePhone match:regex1MobilePhone])
  394. {
  395. NSString* temp1 = nil;
  396. NSString* temp2 = nil;
  397. for (NSString* mobilePhoneStart in mobilePhoneStarts)
  398. {
  399. temp1 = [mobilePhoneStart substringWithRange:range];
  400. temp2 = [mobilePhone substringWithRange:range];
  401. if (NSOrderedSame == [temp1 compare:temp2 options:NSCaseInsensitiveSearch])
  402. {
  403. return YES;
  404. }
  405. }
  406. }
  407. if ([NewUtils matchRegularExpression:mobilePhone match:regex2MobilePhone])
  408. {
  409. NSString* temp1 = nil;
  410. NSString* temp2 = nil;
  411. for (NSString* mobilePhoneStart in mobilePhoneStarts)
  412. {
  413. temp1 = [mobilePhoneStart substringWithRange:range];
  414. range = NSMakeRange (2, 3);
  415. temp2 = [mobilePhone substringWithRange:range];
  416. if (NSOrderedSame == [temp1 compare:temp2 options:NSCaseInsensitiveSearch])
  417. {
  418. return YES;
  419. }
  420. }
  421. }
  422. if ([NewUtils matchRegularExpression:mobilePhone match:regex3MobilePhone])
  423. {
  424. NSString* temp1 = nil;
  425. NSString* temp2 = nil;
  426. for (NSString* mobilePhoneStart in mobilePhoneStarts)
  427. {
  428. temp1 = [mobilePhoneStart substringWithRange:range];
  429. range = NSMakeRange (3, 3);
  430. temp2 = [mobilePhone substringWithRange:range];
  431. if (NSOrderedSame == [temp1 compare:temp2 options:NSCaseInsensitiveSearch])
  432. {
  433. return YES;
  434. }
  435. }
  436. }
  437. return NO;
  438. }
  439. /*数字检测*/
  440. + (BOOL)checkInterNum:(NSString *)num
  441. {
  442. NSScanner* scan = [NSScanner scannerWithString:num];
  443. int val;
  444. return [scan scanInt:&val] && [scan isAtEnd];
  445. }
  446. /*检测中文*/
  447. + (BOOL)checkName:(NSString *)name
  448. {
  449. if (name.length <= 0)
  450. {
  451. return NO;
  452. }
  453. NSString* mach = @"^[\u4e00-\u9fa5]([\u4e00-\u9fa5]){1,6}$";
  454. return [NewUtils matchRegularExpression:name match:mach];
  455. }
  456. /*判断密码 特殊符号跟中文不通过*/
  457. + (BOOL)checkPassword:(NSString *)password
  458. {
  459. if (password.length <= 0)
  460. {
  461. return NO;
  462. }
  463. NSString* mach = @"^[a-zA-Z0-9]{6,20}$";
  464. return [NewUtils matchRegularExpression:password match:mach];
  465. }
  466. /*特殊符号*/
  467. +(BOOL)cheeckNotChina:(NSString*)number
  468. {
  469. if (number.length <= 0)
  470. {
  471. return NO;
  472. }
  473. NSString* mach = @"/^([\u4E00-\u9FA5]|\\w)*$/";
  474. return [NewUtils matchRegularExpression:number match:mach];
  475. }
  476. + (BOOL)checkEmail:(NSString *)email
  477. {
  478. if (email.length <= 0)
  479. {
  480. return NO;
  481. }
  482. NSString* mach = @"^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";
  483. return [NewUtils matchRegularExpression:email match:mach];
  484. }
  485. /**
  486. 压图片质量
  487. 压图片质量和缩小图片大小相结合
  488. @param image image
  489. @return Data
  490. */
  491. + (NSData *)zipImageWithImage:(UIImage *)image
  492. {
  493. if (!image) {
  494. return nil;
  495. }
  496. CGFloat maxFileSize = 32*1024;
  497. CGFloat compression = 0.9f;
  498. NSData *compressedData = UIImageJPEGRepresentation(image, compression);
  499. while ([compressedData length] > maxFileSize) {
  500. compression *= 0.9;
  501. compressedData = UIImageJPEGRepresentation([NewUtils compressImage:image newWidth:image.size.width*compression], compression);
  502. }
  503. return compressedData;
  504. }
  505. /**
  506. * 等比缩放本图片大小
  507. *
  508. * @param newImageWidth 缩放后图片宽度,像素为单位
  509. *
  510. * @return self-->(image)
  511. */
  512. + (UIImage *)compressImage:(UIImage *)image newWidth:(CGFloat)newImageWidth
  513. {
  514. if (!image) return nil;
  515. float imageWidth = image.size.width;
  516. float imageHeight = image.size.height;
  517. float width = newImageWidth;
  518. float height = image.size.height/(image.size.width/width);
  519. float widthScale = imageWidth /width;
  520. float heightScale = imageHeight /height;
  521. // 创建一个bitmap的context
  522. // 并把它设置成为当前正在使用的context
  523. UIGraphicsBeginImageContext(CGSizeMake(width, height));
  524. if (widthScale > heightScale) {
  525. [image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];
  526. }
  527. else {
  528. [image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];
  529. }
  530. // 从当前context中创建一个改变大小后的图片
  531. UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  532. // 使当前的context出堆栈
  533. UIGraphicsEndImageContext();
  534. return newImage;
  535. }
  536. /*图片质量进行压缩*/
  537. - (NSData *)returnsTheSizeAccordingToThePicture:(UIImage *)image
  538. {
  539. NSData *imageData1=UIImagePNGRepresentation(image);
  540. NSData *imageData;
  541. NSInteger sum=[self setCalculatingPictureSize:imageData1];
  542. switch (sum) {
  543. case 0:{//少于300KB
  544. imageData=UIImageJPEGRepresentation(image, 1.0f);
  545. }
  546. break;
  547. case 1:{//超过300kb少于1000kb
  548. imageData=UIImageJPEGRepresentation(image, 0.8f);
  549. }
  550. break;
  551. case 2:{//超过1000KB少于2000kb
  552. imageData=UIImageJPEGRepresentation(image, 0.65f);
  553. }
  554. break;
  555. case 3:{//超过20000KB
  556. imageData=UIImageJPEGRepresentation(image, 0.5f);
  557. }
  558. break;
  559. default:
  560. break;
  561. }
  562. return imageData;
  563. }
  564. //用于计算图片大小
  565. - (NSInteger)setCalculatingPictureSize:(NSData *)image
  566. {
  567. NSInteger sum=0;
  568. CGFloat scale=(image.length/1024);
  569. if (scale>300&&scale<=1000) {
  570. sum=1;
  571. }else if(scale>1000&&scale<=2000){
  572. sum=2;
  573. }else if (scale>2000){
  574. sum=3;
  575. }
  576. return sum;
  577. }
  578. /**
  579. * 图片压缩到指定大小
  580. * @param targetSize 目标图片的大小
  581. * @param sourceImage 源图片
  582. * @return 目标图片
  583. */
  584. + (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize withSourceImage:(UIImage *)sourceImage
  585. {
  586. UIImage *newImage = nil;
  587. CGSize imageSize = sourceImage.size;
  588. CGFloat width = imageSize.width;
  589. CGFloat height = imageSize.height;
  590. CGFloat targetWidth = targetSize.width;
  591. CGFloat targetHeight = targetSize.height;
  592. CGFloat scaleFactor = 0.0;
  593. CGFloat scaledWidth = targetWidth;
  594. CGFloat scaledHeight = targetHeight;
  595. CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
  596. if (CGSizeEqualToSize(imageSize, targetSize) == NO)
  597. {
  598. CGFloat widthFactor = targetWidth / width;
  599. CGFloat heightFactor = targetHeight / height;
  600. if (widthFactor > heightFactor)
  601. scaleFactor = widthFactor; // scale to fit height
  602. else
  603. scaleFactor = heightFactor; // scale to fit width
  604. scaledWidth= width * scaleFactor;
  605. scaledHeight = height * scaleFactor;
  606. // center the image
  607. if (widthFactor > heightFactor)
  608. {
  609. thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
  610. }
  611. else if (widthFactor < heightFactor)
  612. {
  613. thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
  614. }
  615. }
  616. UIGraphicsBeginImageContext(targetSize); // this will crop
  617. CGRect thumbnailRect = CGRectZero;
  618. thumbnailRect.origin = thumbnailPoint;
  619. thumbnailRect.size.width= scaledWidth;
  620. thumbnailRect.size.height = scaledHeight;
  621. [sourceImage drawInRect:thumbnailRect];
  622. newImage = UIGraphicsGetImageFromCurrentImageContext();
  623. if(newImage == nil)
  624. NSLog(@"could not scale image");
  625. //pop the context to get back to the default
  626. UIGraphicsEndImageContext();
  627. return newImage;
  628. }
  629. /*图片拉伸*/
  630. + (UIImage *)stretchImage:(UIImage *)img edgeInsets:(UIEdgeInsets)inset
  631. {
  632. if ([img respondsToSelector:@selector(resizableImageWithCapInsets:resizingMode:)])
  633. {
  634. img = [img resizableImageWithCapInsets:inset resizingMode:UIImageResizingModeStretch];
  635. }
  636. else if ([img respondsToSelector:@selector(resizableImageWithCapInsets:)])
  637. {
  638. img = [img resizableImageWithCapInsets:inset];
  639. }
  640. return img;
  641. }
  642. /*字符串转DATE*/
  643. +(NSString*)dataToString:(NSData*)data
  644. {
  645. return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
  646. }
  647. /*DATA转字符串*/
  648. +(NSData*)stringToData:(NSString*)string
  649. {
  650. return [string dataUsingEncoding: NSASCIIStringEncoding];
  651. }
  652. /*转化日期*/
  653. +(NSString *)shijian:(NSString *)time{
  654. // timeStampString 是服务器返回的13位时间戳
  655. NSString *timeStampString = time;
  656. // iOS 生成的时间戳是10位
  657. NSTimeInterval interval =[timeStampString doubleValue] / 1000.0;
  658. NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
  659. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  660. [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  661. NSString *dateString = [formatter stringFromDate: date];
  662. return dateString;
  663. }
  664. /*转化日期*/
  665. + (NSDateComponents *)componentsOfDate:(NSDate *)date
  666. {
  667. NSDate *aDate = date ? date : [NSDate date];
  668. NSCalendar *calendar = [NSCalendar currentCalendar];
  669. unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;
  670. return [calendar components:unitFlags fromDate:aDate];
  671. }
  672. + (NSString *)stringToFromDate:(NSDate *)date
  673. {
  674. NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
  675. [formatter setDateFormat:@"yyyyMMddHHmmssSSS"];//@"yyyy-MM-dd HH:mm:ss:SSS"
  676. return [formatter stringFromDate:date];
  677. }
  678. /*返回1970年距离至今的时间差*/
  679. + (NSString *)returnTime
  680. {
  681. NSDate *date = [NSDate date];
  682. return [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
  683. }
  684. /*判断数字输入错误的集合*/
  685. + (NSInteger)doTextFieldDelegate:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  686. {
  687. NSInteger result = 0;
  688. NSInteger length = [textField.text length] + [string length];
  689. if (range.length > 0)
  690. {
  691. length--;
  692. }
  693. if (length > 0)
  694. {
  695. if (textField.text.length <=0)
  696. {
  697. if (string.length >=2)
  698. {
  699. if ([[string substringToIndex:1] isEqualToString:@"0"])
  700. {
  701. result = 6;
  702. }
  703. }
  704. }
  705. if ([textField.text isEqualToString:@"0"])
  706. {
  707. if (![string isEqualToString:@"."])
  708. {
  709. result = 5;
  710. }
  711. }
  712. if(length > 8)//大于八位数
  713. {
  714. result = 3;
  715. }
  716. else
  717. {
  718. NSRange textRange = [textField.text rangeOfString:@"."];
  719. NSArray* textArr = [textField.text componentsSeparatedByString:@"."];
  720. if (textRange.length > 0)//如果已经有小数点时
  721. {
  722. if ([[textArr objectAtIndex:1] length]>=2 && string.length>0)//只能保留二位小数
  723. {
  724. result = 1;
  725. }
  726. }
  727. else //如果还没有小数点时
  728. {
  729. if ([string isEqualToString:@"."])//输入小数点时
  730. {
  731. if ([textField.text length] <= 0)//第一位不能输入小数点
  732. {
  733. result = 2;
  734. }
  735. }
  736. }
  737. }
  738. }
  739. return result;
  740. }
  741. /*拨打电话*/
  742. +(void)callTel:(NSString*)tel
  743. {
  744. NSMutableString * str=[[NSMutableString alloc] initWithCapacity:50];
  745. [str appendString:@"tel://"];
  746. [str appendString:tel];
  747. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
  748. }
  749. /*弹框*/
  750. + (void)alertWithMsg:(NSString*)msg delegate:(id<UIAlertViewDelegate>)sender andTag:(NSInteger)tag title:(NSString *)title cancelButtonTitle:(NSString*)cancelButtonTitle otherButtonTitles1:(NSString *)otherButtonTitles1 otherButtonTitles2:(NSString *)otherButtonTitles2 otherButtonTitles3:(NSString *)otherButtonTitles3 otherButtonTitles4:(NSString *)otherButtonTitles4 otherButtonTitles5:(NSString *)otherButtonTitles5 otherButtonTitles6:(NSString *)otherButtonTitles6
  751. {
  752. UIAlertView *view = [[UIAlertView alloc] initWithTitle:title message:msg delegate:sender cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles1,otherButtonTitles2,otherButtonTitles3,otherButtonTitles4,otherButtonTitles5,otherButtonTitles6, nil];
  753. view.tag = tag;
  754. [view show];
  755. }
  756. + (NSString *) getSysInfoByName:(char *)typeSpecifier
  757. {
  758. size_t size;
  759. sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
  760. char *answer = malloc(size);
  761. sysctlbyname(typeSpecifier, answer, &size, NULL, 0);
  762. NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
  763. free(answer);
  764. return results;
  765. }
  766. //
  767. + (NSString *) platform
  768. {
  769. return [NewUtils getSysInfoByName:"hw.machine"];
  770. }
  771. /*iphone/iPad类型及适配*/
  772. + (NSString *) simplePlatformString
  773. {
  774. NSString *platform = [NewUtils platform];
  775. // NSLog(@"手机型号 == %@",platform);
  776. if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G (A1203)";
  777. if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G (A1241/A1324)";
  778. if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS (A1303/A1325)";
  779. if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (A1332)";
  780. if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (A1332)";
  781. if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (A1349)";
  782. if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S (A1387/A1431)";
  783. if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (A1428)";
  784. if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (A1429/A1442)";
  785. if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (A1456/A1532)";
  786. if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (A1507/A1516/A1526/A1529)";
  787. if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (A1453/A1533)";
  788. if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (A1457/A1518/A1528/A1530)";
  789. if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus (A1522/A1524)";
  790. if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 (A1549/A1586)";
  791. if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
  792. if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6 Plus s";
  793. if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G (A1213)";
  794. if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G (A1288)";
  795. if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G (A1318)";
  796. if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G (A1367)";
  797. if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G (A1421/A1509)";
  798. if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G (A1219/A1337)";
  799. if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (A1395)";
  800. if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (A1396)";
  801. if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (A1397)";
  802. if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (A1395+New Chip)";
  803. if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G (A1432)";
  804. if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G (A1454)";
  805. if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G (A1455)";
  806. if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (A1416)";
  807. if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (A1403)";
  808. if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (A1430)";
  809. if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (A1458)";
  810. if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (A1459)";
  811. if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (A1460)";
  812. if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (A1474)";
  813. if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (A1475)";
  814. if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air (A1476)";
  815. if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G (A1489)";
  816. if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G (A1490)";
  817. if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G (A1491)";
  818. if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
  819. if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
  820. return platform;
  821. }
  822. /*对一段字符串的中间部分进行隐藏 以***代替*/
  823. + (NSString *)formatCardNumber:(NSString *)cardNumber
  824. {
  825. if (cardNumber.length > 9)
  826. {
  827. NSString *strLeft = [cardNumber substringToIndex:6];
  828. NSString *strRight = [cardNumber substringFromIndex:(cardNumber.length - 4)];
  829. return [NSString stringWithFormat:@"%@***%@",strLeft,strRight];
  830. }
  831. else
  832. {
  833. return cardNumber;
  834. }
  835. }
  836. /*存储BOOL判断的条件*/
  837. +(void)userDefaultsKey:(NSString *)key Value:(BOOL)value
  838. {
  839. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  840. [defaults setBool:value forKey:key];
  841. [defaults synchronize];
  842. }
  843. /*根据Key值来判断逻辑*/
  844. +(BOOL)userDefaultsKey:(NSString *)key
  845. {
  846. BOOL defaults = [[NSUserDefaults standardUserDefaults] boolForKey:key];
  847. return defaults;
  848. }
  849. /*存储判断NSString的条件*/
  850. +(void)userDefaultsStringKey:(NSString *)key Value:(NSString *)value
  851. {
  852. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  853. [defaults setValue:value forKey:key];
  854. [defaults synchronize];
  855. }
  856. /*根据Key值来判断逻辑*/
  857. +(NSString *)userDefaultsStringKey:(NSString *)key
  858. {
  859. NSString *defaults = [[NSUserDefaults standardUserDefaults] valueForKey:key];
  860. return defaults;
  861. }
  862. //创建package签名
  863. +(NSString*) createMd5Sign:(NSMutableDictionary*)dict
  864. {
  865. NSMutableString *contentString =[NSMutableString string];
  866. NSArray *keys = [dict allKeys];
  867. //按字母顺序排序
  868. NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  869. return [obj1 compare:obj2 options:NSNumericSearch];
  870. }];
  871. //拼接字符串
  872. for (NSString *categoryId in sortedArray) {
  873. if ( ![[dict objectForKey:categoryId] isEqualToString:@""]
  874. && ![categoryId isEqualToString:@"sign"]
  875. && ![categoryId isEqualToString:@"key"]
  876. )
  877. {
  878. [contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
  879. }
  880. }
  881. //添加key字段 商户API密钥
  882. [contentString appendFormat:@"key=%@", @"8ae1da0fe37c98412768453f82490da2"];
  883. //得到MD5 sign签名
  884. NSString *md5Sign =[NewUtils md5:contentString];
  885. return md5Sign;
  886. }
  887. //md5 encode
  888. +(NSString *) md5:(NSString *)str
  889. {
  890. const char *cStr = [str UTF8String];
  891. unsigned char digest[CC_MD5_DIGEST_LENGTH];
  892. CC_MD5( cStr, (unsigned int)strlen(cStr), digest );
  893. NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  894. for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
  895. [output appendFormat:@"%02X", digest[i]];
  896. return output;
  897. }
  898. +(NSString *)stringTransformation:(NSString *)string changeType:(NSString *)type
  899. {
  900. //全部大写
  901. if ([type isEqualToString:@"A"]) {
  902. return [string uppercaseString];
  903. }
  904. //全部小写
  905. else if ([type isEqualToString:@"a"]) {
  906. return [string lowercaseString];
  907. }
  908. //开头大写,其余小写
  909. else if ([type isEqualToString:@"Ab"]) {
  910. return [string capitalizedString];
  911. }
  912. else {
  913. return string;
  914. }
  915. }
  916. + (NSString*)randomCount:(NSInteger)randomCount{
  917. NSInteger count = randomCount;
  918. char chars[] = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ";
  919. char codes[count];
  920. for(int i=0;i<count; i++){
  921. codes[i]= chars[arc4random()%62];
  922. }
  923. NSString *text = [[NSString alloc] initWithBytes:codes
  924. length:count encoding:NSUTF8StringEncoding];
  925. return text;
  926. }
  927. + (NSString *)typeForImageData:(NSData *)data {
  928. if (data.length > 4) {
  929. const unsigned char * bytes = [data bytes];
  930. if (bytes[0] == 0xff &&
  931. bytes[1] == 0xd8 &&
  932. bytes[2] == 0xff)
  933. {
  934. return @"jpeg";
  935. }
  936. if (bytes[0] == 0x89 &&
  937. bytes[1] == 0x50 &&
  938. bytes[2] == 0x4e &&
  939. bytes[3] == 0x47)
  940. {
  941. return @"png";;
  942. }
  943. }
  944. return nil;
  945. /*
  946. uint8_t c;
  947. [data getBytes:&c length:1];
  948. switch (c) {
  949. case 0xFF:
  950. return @"jpeg";
  951. case 0x89:
  952. return @"png";
  953. case 0x47:
  954. return @"gif";
  955. case 0x49:
  956. return nil;
  957. case 0x4D:
  958. return @"tiff";
  959. }
  960. return nil;
  961. */
  962. }
  963. +(NSString *)resourcesFileName:(NSString *)fileName ofType:(NSString *)type
  964. {
  965. if ([fileName isEqualToString:@""] || fileName == nil) {
  966. return nil;
  967. }
  968. return [[NSBundle mainBundle] pathForResource:fileName ofType:type];
  969. /*
  970. 提取路径中的文件名
  971. 方法一:通过函数
  972. - (NSString *)displayNameAtPath:(NSString *)path
  973. 需要主意这个函数返回的是文件名称的显示字符串,适当的进行本地化。如果手机中选择的是英语则显示英文名,中文则显示中文名
  974. 方法二:lastPathComponent
  975. - (NSString *)lastPathComponent
  976. */
  977. }
  978. //根据文件名来获取文件路径 取所有母缓存文件路径
  979. + (NSString *)resourcesFileName:(NSString *)fileName
  980. {
  981. NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
  982. NSUserDomainMask,
  983. YES);
  984. NSString *documentDirectory = [path objectAtIndex:0];
  985. return [documentDirectory stringByAppendingPathComponent:fileName];
  986. }
  987. /*
  988. //根据文件路径获取文件名称
  989. [[NewUtils resourcesFileName:@"支付宝实名认证"] lastPathComponent]
  990. //resource目录下 取你自己APP下的缓存路径
  991. + (NSString *)resourcesFileName3:(NSString *)fileName
  992. {
  993. return [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
  994. }
  995. //Cache目录下
  996. + (NSString *)resourcesFileName4:(NSString *)fileName
  997. {
  998. NSArray *cache = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  999. return [cache objectAtIndex:0];
  1000. //NSString *voiceName = [cachePath stringByAppendingPathComponent:[sender stringByAppendingString:@".wav"]];
  1001. }
  1002. _array_FileName=[NSMutableArray array];
  1003. _array_FilePath=[NSMutableArray array];
  1004. [self getFile];
  1005. -(void)getFile{
  1006. NSString *DocPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  1007. NSFileManager *file_manager=[[NSFileManager alloc]init];
  1008. NSArray *subPaths=[file_manager subpathsAtPath:DocPath];
  1009. for (NSString *path in subPaths) {
  1010. NSArray *arry=[path componentsSeparatedByString:@"."];
  1011. NSString *last=[arry lastObject];
  1012. //NSLog(@"filepath:%@ ----- fileName:%@",path,[path lastPathComponent]);
  1013. if ([last isEqualToString:@"pdf"]) {
  1014. [_array_FilePath addObject:[DocPath stringByAppendingPathComponent:path]];
  1015. [_array_FileName addObject:[path lastPathComponent]];
  1016. NSLog(@"filepath:%@ ----- fileName:%@",path,[path lastPathComponent]);
  1017. }
  1018. }
  1019. }
  1020. */
  1021. //获取当前屏幕显示的viewcontroller
  1022. - (UIViewController *)getCurrentVC
  1023. {
  1024. UIViewController *result = nil;
  1025. UIWindow * window = [[UIApplication sharedApplication] keyWindow];
  1026. if (window.windowLevel != UIWindowLevelNormal)
  1027. {
  1028. NSArray *windows = [[UIApplication sharedApplication] windows];
  1029. for(UIWindow * tmpWin in windows)
  1030. {
  1031. if (tmpWin.windowLevel == UIWindowLevelNormal)
  1032. {
  1033. window = tmpWin;
  1034. break;
  1035. }
  1036. }
  1037. }
  1038. UIView *frontView = [[window subviews] objectAtIndex:0];
  1039. id nextResponder = [frontView nextResponder];
  1040. if ([nextResponder isKindOfClass:[UIViewController class]])
  1041. result = nextResponder;
  1042. else
  1043. result = window.rootViewController;
  1044. return result;
  1045. }
  1046. //获取当前屏幕中present出来的viewcontroller
  1047. - (UIViewController *)getPresentedViewController
  1048. {
  1049. UIViewController *appRootVC = [[UIApplication sharedApplication] keyWindow].rootViewController;
  1050. UIViewController *topVC = appRootVC;
  1051. if (topVC.presentedViewController) {
  1052. topVC = topVC.presentedViewController;
  1053. }
  1054. return topVC;
  1055. }
  1056. //删除整个共享文件夹Document
  1057. + (void)deleteDocumentFolder
  1058. {
  1059. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  1060. NSString *path = [paths objectAtIndex:0];
  1061. [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
  1062. }
  1063. + (CGFloat)navHeader{
  1064. if ([[NewUtils iphoneType] isEqualToString:@"IPhone_X"]) {
  1065. return 88;
  1066. }
  1067. return 64;
  1068. }
  1069. + (NSString *)iphoneType {
  1070. struct utsname systemInfo;
  1071. uname(&systemInfo);
  1072. NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  1073. //simulator
  1074. if ([platform isEqualToString:@"i386"]) return @"Simulator";
  1075. if ([platform isEqualToString:@"x86_64"]) return @"Simulator";
  1076. //iPhone
  1077. if ([platform isEqualToString:@"iPhone1,1"]) return @"IPhone_1G";
  1078. if ([platform isEqualToString:@"iPhone1,2"]) return @"IPhone_3G";
  1079. if ([platform isEqualToString:@"iPhone2,1"]) return @"IPhone_3GS";
  1080. if ([platform isEqualToString:@"iPhone3,1"]) return @"IPhone_4";
  1081. if ([platform isEqualToString:@"iPhone3,2"]) return @"IPhone_4";
  1082. if ([platform isEqualToString:@"iPhone4,1"]) return @"IPhone_4s";
  1083. if ([platform isEqualToString:@"iPhone5,1"]) return @"IPhone_5";
  1084. if ([platform isEqualToString:@"iPhone5,2"]) return @"IPhone_5";
  1085. if ([platform isEqualToString:@"iPhone5,3"]) return @"IPhone_5C";
  1086. if ([platform isEqualToString:@"iPhone5,4"]) return @"IPhone_5C";
  1087. if ([platform isEqualToString:@"iPhone6,1"]) return @"IPhone_5S";
  1088. if ([platform isEqualToString:@"iPhone6,2"]) return @"IPhone_5S";
  1089. if ([platform isEqualToString:@"iPhone7,1"]) return @"IPhone_6P";
  1090. if ([platform isEqualToString:@"iPhone7,2"]) return @"IPhone_6";
  1091. if ([platform isEqualToString:@"iPhone8,1"]) return @"IPhone_6s";
  1092. if ([platform isEqualToString:@"iPhone8,2"]) return @"IPhone_6s_P";
  1093. if ([platform isEqualToString:@"iPhone8,4"]) return @"IPhone_SE";
  1094. if ([platform isEqualToString:@"iPhone9,1"]) return @"IPhone_7";
  1095. if ([platform isEqualToString:@"iPhone9,3"]) return @"IPhone_7";
  1096. if ([platform isEqualToString:@"iPhone9,2"]) return @"IPhone_7P";
  1097. if ([platform isEqualToString:@"iPhone9,4"]) return @"IPhone_7P";
  1098. if ([platform isEqualToString:@"iPhone10,1"]) return @"IPhone_8";
  1099. if ([platform isEqualToString:@"iPhone10,4"]) return @"IPhone_8";
  1100. if ([platform isEqualToString:@"iPhone10,2"]) return @"IPhone_8P";
  1101. if ([platform isEqualToString:@"iPhone10,5"]) return @"IPhone_8P";
  1102. if ([platform isEqualToString:@"iPhone10,3"]) return @"IPhone_X";
  1103. if ([platform isEqualToString:@"iPhone10,6"]) return @"IPhone_X";
  1104. if ([NewUtils getIsIphone]) return @"IPhone_X";
  1105. return @"NUKown";
  1106. }
  1107. + (BOOL)getIsIphone {
  1108. NSString *deviceType = [UIDevice currentDevice].model;
  1109. if([deviceType isEqualToString:@"iPhone"]) {
  1110. //iPhone
  1111. return YES;
  1112. }
  1113. else if([deviceType isEqualToString:@"iPod touch"]) {
  1114. //iPod Touch
  1115. return NO;
  1116. }
  1117. else if([deviceType isEqualToString:@"iPad"]) {
  1118. //iPad
  1119. return NO;
  1120. }
  1121. return NO;
  1122. }
  1123. + (CGFloat)navTABBAR_HEIGHT{
  1124. if ([[NewUtils iphoneType] isEqualToString:@"IPhone_X"]) {
  1125. return 83;
  1126. }
  1127. return 49;
  1128. }
  1129. @end