iOS常用公共方法

1. 获取磁盘总空间大小

//磁盘总空间+ (CGFloat)diskOfAllSizeMBytes{CGFloatsize =0.0;NSError*error;NSDictionary*dic = [[NSFileManagerdefaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];if(error) {#ifdef DEBUGNSLog(@"error: %@", error.localizedDescription);#endif}else{NSNumber*number = [dic objectForKey:NSFileSystemSize];        size = [number floatValue]/1024/1024;    }returnsize;}

2. 获取磁盘可用空间大小

//磁盘可用空间+ (CGFloat)diskOfFreeSizeMBytes{CGFloatsize =0.0;NSError*error;NSDictionary*dic = [[NSFileManagerdefaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];if(error) {#ifdef DEBUGNSLog(@"error: %@", error.localizedDescription);#endif}else{NSNumber*number = [dic objectForKey:NSFileSystemFreeSize];        size = [number floatValue]/1024/1024;    }returnsize;}

3. 获取指定路径下某个文件的大小

//获取文件大小+ (longlong)fileSizeAtPath:(NSString*)filePath{NSFileManager*fileManager = [NSFileManagerdefaultManager];if(![fileManager fileExistsAtPath:filePath])return0;return[[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];}

4. 获取文件夹下所有文件的大小

//获取文件夹下所有文件的大小+ (longlong)folderSizeAtPath:(NSString*)folderPath{NSFileManager*fileManager = [NSFileManagerdefaultManager];if(![fileManager fileExistsAtPath:folderPath])return0;NSEnumerator*filesEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];NSString*fileName;longlongfolerSize =0;while((fileName = [filesEnumerator nextObject]) !=nil) {NSString*filePath = [folderPath stringByAppendingPathComponent:fileName];        folerSize += [selffileSizeAtPath:filePath];    }returnfolerSize;}

5. 获取字符串(或汉字)首字母

//获取字符串(或汉字)首字母+ (NSString*)firstCharacterWithString:(NSString*)string{NSMutableString*str = [NSMutableStringstringWithString:string];CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);NSString*pingyin = [str capitalizedString];return[pingyin substringToIndex:1];}

6. 将字符串数组按照元素首字母顺序进行排序分组

//将字符串数组按照元素首字母顺序进行排序分组+ (NSDictionary*)dictionaryOrderByCharacterWithOriginalArray:(NSArray*)array{if(array.count==0) {returnnil;    }for(idobjinarray) {if(![obj isKindOfClass:[NSStringclass]]) {returnnil;        }    }UILocalizedIndexedCollation*indexedCollation = [UILocalizedIndexedCollationcurrentCollation];NSMutableArray*objects = [NSMutableArrayarrayWithCapacity:indexedCollation.sectionTitles.count];//创建27个分组数组for(inti =0; i < indexedCollation.sectionTitles.count; i++) {NSMutableArray*obj = [NSMutableArrayarray];        [objects addObject:obj];    }NSMutableArray*keys = [NSMutableArrayarrayWithCapacity:objects.count];//按字母顺序进行分组NSIntegerlastIndex = -1;for(inti =0; i < array.count; i++) {NSIntegerindex = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];        [[objects objectAtIndex:index] addObject:array[i]];        lastIndex = index;    }//去掉空数组for(inti =0; i < objects.count; i++) {NSMutableArray*obj = objects[i];if(obj.count==0) {            [objects removeObject:obj];        }    }//获取索引字母for(NSMutableArray*objinobjects) {NSString*str = obj[0];NSString*key = [selffirstCharacterWithString:str];        [keys addObject:key];    }NSMutableDictionary*dic = [NSMutableDictionarydictionary];    [dic setObject:objects forKey:keys];returndic;}//获取字符串(或汉字)首字母+ (NSString*)firstCharacterWithString:(NSString*)string{NSMutableString*str = [NSMutableStringstringWithString:string];CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);NSString*pingyin = [str capitalizedString];return[pingyin substringToIndex:1];}

使用如下:

NSArray*arr = @[@"guangzhou",@"shanghai",@"北京",@"henan",@"hainan"];NSDictionary*dic = [Utilities dictionaryOrderByCharacterWithOriginalArray:arr];NSLog(@"\n\ndic: %@", dic);

输出结果如下:

iOS常用公共方法_第1张图片

输出结果

7. 获取当前时间

//获取当前时间//format: @"yyyy-MM-dd HH:mm:ss"、@"yyyy年MM月dd日 HH时mm分ss秒"+ (NSString*)currentDateWithFormat:(NSString*)format{NSDateFormatter*dateFormatter = [[NSDateFormatteralloc] init];    [dateFormatter setDateFormat:format];return[dateFormatter stringFromDate:[NSDatedate]];}

8. 计算上次日期距离现在多久, 如 xx 小时前、xx 分钟前等

/**

*  计算上次日期距离现在多久

*

*  @param lastTime    上次日期(需要和格式对应)

*  @param format1    上次日期格式

*  @param currentTime 最近日期(需要和格式对应)

*  @param format2    最近日期格式

*

*  @return xx分钟前、xx小时前、xx天前

*/+ (NSString*)timeIntervalFromLastTime:(NSString*)lastTime                        lastTimeFormat:(NSString*)format1                        ToCurrentTime:(NSString*)currentTime                    currentTimeFormat:(NSString*)format2{//上次时间NSDateFormatter*dateFormatter1 = [[NSDateFormatteralloc]init];    dateFormatter1.dateFormat= format1;NSDate*lastDate = [dateFormatter1 dateFromString:lastTime];//当前时间NSDateFormatter*dateFormatter2 = [[NSDateFormatteralloc]init];    dateFormatter2.dateFormat= format2;NSDate*currentDate = [dateFormatter2 dateFromString:currentTime];return[Utilities timeIntervalFromLastTime:lastDate ToCurrentTime:currentDate];}+ (NSString*)timeIntervalFromLastTime:(NSDate*)lastTime ToCurrentTime:(NSDate*)currentTime{NSTimeZone*timeZone = [NSTimeZonesystemTimeZone];//上次时间NSDate*lastDate = [lastTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:lastTime]];//当前时间NSDate*currentDate = [currentTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:currentTime]];//时间间隔NSIntegerintevalTime = [currentDate timeIntervalSinceReferenceDate] - [lastDate timeIntervalSinceReferenceDate];//秒、分、小时、天、月、年NSIntegerminutes = intevalTime /60;NSIntegerhours = intevalTime /60/60;NSIntegerday = intevalTime /60/60/24;NSIntegermonth = intevalTime /60/60/24/30;NSIntegeryers = intevalTime /60/60/24/365;if(minutes <=10) {return@"刚刚";    }elseif(minutes <60){return[NSStringstringWithFormat:@"%ld分钟前",(long)minutes];    }elseif(hours <24){return[NSStringstringWithFormat:@"%ld小时前",(long)hours];    }elseif(day <30){return[NSStringstringWithFormat:@"%ld天前",(long)day];    }elseif(month <12){NSDateFormatter* df =[[NSDateFormatteralloc]init];        df.dateFormat=@"M月d日";NSString* time = [df stringFromDate:lastDate];returntime;    }elseif(yers >=1){NSDateFormatter* df =[[NSDateFormatteralloc]init];        df.dateFormat=@"yyyy年M月d日";NSString* time = [df stringFromDate:lastDate];returntime;    }return@"";}

使用如下:

NSLog(@"\n\nresult: %@", [Utilities timeIntervalFromLastTime:@"2015年12月8日 15:50"lastTimeFormat:@"yyyy年MM月dd日 HH:mm"ToCurrentTime:@"2015/12/08 16:12"currentTimeFormat:@"yyyy/MM/dd HH:mm"]);

输出结果如下:

输出结果

9. 判断手机号码格式是否正确

//判断手机号码格式是否正确+ (BOOL)valiMobile:(NSString*)mobile{    mobile = [mobile stringByReplacingOccurrencesOfString:@" "withString:@""];if(mobile.length!=11)    {returnNO;    }else{/**

* 移动号段正则表达式

*/NSString*CM_NUM =@"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";/**

* 联通号段正则表达式

*/NSString*CU_NUM =@"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";/**

* 电信号段正则表达式

*/NSString*CT_NUM =@"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";NSPredicate*pred1 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CM_NUM];BOOLisMatch1 = [pred1 evaluateWithObject:mobile];NSPredicate*pred2 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CU_NUM];BOOLisMatch2 = [pred2 evaluateWithObject:mobile];NSPredicate*pred3 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CT_NUM];BOOLisMatch3 = [pred3 evaluateWithObject:mobile];if(isMatch1 || isMatch2 || isMatch3) {returnYES;        }else{returnNO;        }    }}

10. 判断邮箱格式是否正确

//利用正则表达式验证+ (BOOL)isAvailableEmail:(NSString*)email {NSString*emailRegex =@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";NSPredicate*emailTest = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", emailRegex];return[emailTest evaluateWithObject:email];}

11. 将十六进制颜色转换为 UIColor 对象

//将十六进制颜色转换为 UIColor 对象+ (UIColor*)colorWithHexString:(NSString*)color{NSString*cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]] uppercaseString];// String should be 6 or 8 charactersif([cString length] <6) {return[UIColorclearColor];    }// strip "0X" or "#" if it appearsif([cString hasPrefix:@"0X"])        cString = [cString substringFromIndex:2];if([cString hasPrefix:@"#"])        cString = [cString substringFromIndex:1];if([cString length] !=6)return[UIColorclearColor];// Separate into r, g, b substringsNSRangerange;    range.location=0;    range.length=2;//rNSString*rString = [cString substringWithRange:range];//grange.location=2;NSString*gString = [cString substringWithRange:range];//brange.location=4;NSString*bString = [cString substringWithRange:range];// Scan valuesunsignedintr, g, b;    [[NSScannerscannerWithString:rString] scanHexInt:&r];    [[NSScannerscannerWithString:gString] scanHexInt:&g];    [[NSScannerscannerWithString:bString] scanHexInt:&b];return[UIColorcolorWithRed:((float) r /255.0f) green:((float) g /255.0f) blue:((float) b /255.0f) alpha:1.0f];}

12. 对图片进行滤镜处理

#pragma mark - 对图片进行滤镜处理// 怀旧 --> CIPhotoEffectInstant                        单色 --> CIPhotoEffectMono// 黑白 --> CIPhotoEffectNoir                            褪色 --> CIPhotoEffectFade// 色调 --> CIPhotoEffectTonal                          冲印 --> CIPhotoEffectProcess// 岁月 --> CIPhotoEffectTransfer                        铬黄 --> CIPhotoEffectChrome// CILinearToSRGBToneCurve, CISRGBToneCurveToLinear, CIGaussianBlur, CIBoxBlur, CIDiscBlur, CISepiaTone, CIDepthOfField+ (UIImage*)filterWithOriginalImage:(UIImage*)image filterName:(NSString*)name{CIContext*context = [CIContextcontextWithOptions:nil];CIImage*inputImage = [[CIImagealloc] initWithImage:image];CIFilter*filter = [CIFilterfilterWithName:name];    [filter setValue:inputImage forKey:kCIInputImageKey];CIImage*result = [filter valueForKey:kCIOutputImageKey];CGImageRefcgImage = [context createCGImage:result fromRect:[result extent]];UIImage*resultImage = [UIImageimageWithCGImage:cgImage];CGImageRelease(cgImage);returnresultImage;}

13. 对图片进行模糊处理

#pragma mark - 对图片进行模糊处理// CIGaussianBlur ---> 高斯模糊// CIBoxBlur      ---> 均值模糊(Available in iOS 9.0 and later)// CIDiscBlur    ---> 环形卷积模糊(Available in iOS 9.0 and later)// CIMedianFilter ---> 中值模糊, 用于消除图像噪点, 无需设置radius(Available in iOS 9.0 and later)// CIMotionBlur  ---> 运动模糊, 用于模拟相机移动拍摄时的扫尾效果(Available in iOS 9.0 and later)+ (UIImage*)blurWithOriginalImage:(UIImage*)image blurName:(NSString*)name radius:(NSInteger)radius{CIContext*context = [CIContextcontextWithOptions:nil];CIImage*inputImage = [[CIImagealloc] initWithImage:image];CIFilter*filter;if(name.length!=0) {        filter = [CIFilterfilterWithName:name];        [filter setValue:inputImage forKey:kCIInputImageKey];if(![name isEqualToString:@"CIMedianFilter"]) {            [filter setValue:@(radius) forKey:@"inputRadius"];        }CIImage*result = [filter valueForKey:kCIOutputImageKey];CGImageRefcgImage = [context createCGImage:result fromRect:[result extent]];UIImage*resultImage = [UIImageimageWithCGImage:cgImage];CGImageRelease(cgImage);returnresultImage;    }else{returnnil;    }}

14. 调整图片饱和度、亮度、对比度

/**

*  调整图片饱和度, 亮度, 对比度

*

*  @param image      目标图片

*  @param saturation 饱和度

*  @param brightness 亮度: -1.0 ~ 1.0

*  @param contrast  对比度

*

*/+ (UIImage*)colorControlsWithOriginalImage:(UIImage*)image                                saturation:(CGFloat)saturation                                brightness:(CGFloat)brightness                                  contrast:(CGFloat)contrast{CIContext*context = [CIContextcontextWithOptions:nil];CIImage*inputImage = [[CIImagealloc] initWithImage:image];CIFilter*filter = [CIFilterfilterWithName:@"CIColorControls"];    [filter setValue:inputImage forKey:kCIInputImageKey];    [filter setValue:@(saturation) forKey:@"inputSaturation"];    [filter setValue:@(brightness) forKey:@"inputBrightness"];    [filter setValue:@(contrast) forKey:@"inputContrast"];CIImage*result = [filter valueForKey:kCIOutputImageKey];CGImageRefcgImage = [context createCGImage:result fromRect:[result extent]];UIImage*resultImage = [UIImageimageWithCGImage:cgImage];CGImageRelease(cgImage);returnresultImage;}

15. 创建一张实时模糊效果 View (毛玻璃效果)

//Avilable in iOS 8.0 and later+ (UIVisualEffectView*)effectViewWithFrame:(CGRect)frame{UIBlurEffect*effect = [UIBlurEffecteffectWithStyle:UIBlurEffectStyleLight];UIVisualEffectView*effectView = [[UIVisualEffectViewalloc] initWithEffect:effect];    effectView.frame= frame;returneffectView;}

16. 全屏截图

//全屏截图+ (UIImage*)shotScreen{UIWindow*window = [UIApplicationsharedApplication].keyWindow;UIGraphicsBeginImageContext(window.bounds.size);    [window.layerrenderInContext:UIGraphicsGetCurrentContext()];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();returnimage;}

17. 截取一张 view 生成图片

//截取view生成一张图片+ (UIImage*)shotWithView:(UIView*)view{UIGraphicsBeginImageContext(view.bounds.size);    [view.layerrenderInContext:UIGraphicsGetCurrentContext()];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();returnimage;}

18. 截取view中某个区域生成一张图片

//截取view中某个区域生成一张图片+ (UIImage*)shotWithView:(UIView*)view scope:(CGRect)scope{CGImageRefimageRef =CGImageCreateWithImageInRect([selfshotWithView:view].CGImage, scope);UIGraphicsBeginImageContext(scope.size);CGContextRefcontext =UIGraphicsGetCurrentContext();CGRectrect =CGRectMake(0,0, scope.size.width, scope.size.height);CGContextTranslateCTM(context,0, rect.size.height);//下移CGContextScaleCTM(context,1.0f, -1.0f);//上翻CGContextDrawImage(context, rect, imageRef);UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();CGImageRelease(imageRef);CGContextRelease(context);returnimage;}

19. 压缩图片到指定尺寸大小

//压缩图片到指定尺寸大小+ (UIImage*)compressOriginalImage:(UIImage*)image toSize:(CGSize)size{UIImage*resultImage = image;UIGraphicsBeginImageContext(size);    [resultImage drawInRect:CGRectMake(0,0, size.width, size.height)];UIGraphicsEndImageContext();returnresultImage;}

20. 压缩图片到指定文件大小

//压缩图片到指定文件大小+ (NSData*)compressOriginalImage:(UIImage*)image toMaxDataSizeKBytes:(CGFloat)size{NSData*data =UIImageJPEGRepresentation(image,1.0);CGFloatdataKBytes = data.length/1000.0;CGFloatmaxQuality =0.9f;CGFloatlastData = dataKBytes;while(dataKBytes > size && maxQuality >0.01f) {        maxQuality = maxQuality -0.01f;        data =UIImageJPEGRepresentation(image, maxQuality);        dataKBytes = data.length/1000.0;if(lastData == dataKBytes) {break;        }else{            lastData = dataKBytes;        }    }returndata;}

21. 获取设备 IP 地址

需要先引入下头文件:

#import#import

代码:

//获取设备 IP 地址+ (NSString*)getIPAddress {NSString*address =@"error";structifaddrs *interfaces =NULL;structifaddrs *temp_addr =NULL;intsuccess =0;    success = getifaddrs(&interfaces);if(success ==0) {        temp_addr = interfaces;while(temp_addr !=NULL) {if(temp_addr->ifa_addr->sa_family == AF_INET) {if([[NSStringstringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {                    address = [NSStringstringWithUTF8String:inet_ntoa(((structsockaddr_in *)temp_addr->ifa_addr)->sin_addr)];                }            }            temp_addr = temp_addr->ifa_next;        }    }    freeifaddrs(interfaces);returnaddress;}

22. 判断字符串中是否含有空格

+ (BOOL)isHaveSpaceInString:(NSString*)string{NSRange_range = [string rangeOfString:@" "];if(_range.location!=NSNotFound) {returnYES;    }else{returnNO;    }}

23. 判断字符串中是否含有某个字符串

+ (BOOL)isHaveString:(NSString*)string1 InString:(NSString*)string2{NSRange_range = [string2 rangeOfString:string1];if(_range.location!=NSNotFound) {returnYES;    }else{returnNO;    }}

24. 判断字符串中是否含有中文

+ (BOOL)isHaveChineseInString:(NSString *)string{for(NSInteger i =0; i < [stringlength]; i++){inta = [stringcharacterAtIndex:i];if(a >0x4e00&& a <0x9fff) {returnYES;        }    }returnNO;}

25. 判断字符串是否全部为数字

+ (BOOL)isAllNum:(NSString*)string{unicharc;for(inti=0; i

26. 绘制虚线

/*

** lineFrame:    虚线的 frame

** length:        虚线中短线的宽度

** spacing:      虚线中短线之间的间距

** color:        虚线中短线的颜色

*/+ (UIView*)createDashedLineWithFrame:(CGRect)lineFrame                          lineLength:(int)length                          lineSpacing:(int)spacing                            lineColor:(UIColor*)color{UIView*dashedLine = [[UIViewalloc] initWithFrame:lineFrame];    dashedLine.backgroundColor= [UIColorclearColor];CAShapeLayer*shapeLayer = [CAShapeLayerlayer];    [shapeLayer setBounds:dashedLine.bounds];    [shapeLayer setPosition:CGPointMake(CGRectGetWidth(dashedLine.frame) /2,CGRectGetHeight(dashedLine.frame))];    [shapeLayer setFillColor:[UIColorclearColor].CGColor];    [shapeLayer setStrokeColor:color.CGColor];    [shapeLayer setLineWidth:CGRectGetHeight(dashedLine.frame)];    [shapeLayer setLineJoin:kCALineJoinRound];    [shapeLayer setLineDashPattern:[NSArrayarrayWithObjects:[NSNumbernumberWithInt:length], [NSNumbernumberWithInt:spacing],nil]];CGMutablePathRefpath =CGPathCreateMutable();CGPathMoveToPoint(path,NULL,0,0);CGPathAddLineToPoint(path,NULL,CGRectGetWidth(dashedLine.frame),0);    [shapeLayer setPath:path];CGPathRelease(path);    [dashedLine.layeraddSublayer:shapeLayer];returndashedLine;}

文/jianshu_wl(作者)

原文链接:http://www.jianshu.com/p/997f96d2a0b5

著作权归作者所有,转载请联系作者获得授权,并标注“作者”。

你可能感兴趣的:(iOS常用公共方法)