NewUtils.m 37 KB

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