ios常用公共方法
1. 获取磁盘总空间大小
//磁盘总空间
+ (CGFloat)diskOfAllSizeMBytes{
CGFloat size = 0.0;
NSError *error;
NSDictionary *dic = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
if (error) {
#ifdef DEBUG
NSLog(@"error: %@", error.localizedDescription);
#endif
}else{
NSNumber *number = [dic objectForKey:NSFileSystemSize];
size = [number floatValue]/1024/1024;
}
return size;
}
2. 获取磁盘可用空间大小
//磁盘可用空间
+ (CGFloat)diskOfFreeSizeMBytes{
CGFloat size = 0.0;
NSError*error;
NSDictionary*dic = [[NSFileManagerdefaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
if(error) {
#ifdef DEBUG
NSLog(@"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(idobj in array) {
if(![obj isKindOfClass:[NSStringclass]]) {
returnnil;
}
}
UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];
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*obj in objects) {
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);
输出结果如下:
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 characters
if([cString length] < 6) {
return[UIColor clearColor];
}
// strip "0X" or "#" if it appears
if([cString hasPrefix:@"0X"])
cString = [cString substringFromIndex:2];
if([cString hasPrefix:@"#"])
cString = [cString substringFromIndex:1];
if([cString length] != 6)
return[UIColor clearColor];
// Separate into r, g, b substrings
NSRangerange;
range.location = 0;
range.length = 2;
//r
NSString*rString = [cString substringWithRange:range];
//g
range.location = 2;
NSString*gString = [cString substringWithRange:range];
//b
range.location = 4;
NSString*bString = [cString substringWithRange:range];
// Scan values
unsigned intr, g, b;
[[NSScannerscannerWithString:rString] scanHexInt:&r];
[[NSScannerscannerWithString:gString] scanHexInt:&g];
[[NSScannerscannerWithString:bString] scanHexInt:&b];
return[UIColor colorWithRed:((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 = [CIContext contextWithOptions:nil];
CIImage *inputImage = [[CIImage alloc] initWithImage:image];
CIFilter *filter = [CIFilter filterWithName:name];
[filter setValue:inputImage forKey:kCIInputImageKey];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage *resultImage = [UIImage imageWithCGImage: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 = [CIContext contextWithOptions:nil];
CIImage *inputImage = [[CIImage alloc] initWithImage:image];
CIFilter *filter;
if(name.length != 0) {
filter = [CIFilter filterWithName:name];
[filter setValue:inputImage forKey:kCIInputImageKey];
if(![name isEqualToString:@"CIMedianFilter"]) {
[filter setValue:@(radius) forKey:@"inputRadius"];
}
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage *resultImage = [UIImage imageWithCGImage: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 = [CIContext contextWithOptions:nil];
CIImage *inputImage = [[CIImage alloc] initWithImage:image];
CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"];
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:@(saturation) forKey:@"inputSaturation"];
[filter setValue:@(brightness) forKey:@"inputBrightness"];// 0.0 ~ 1.0
[filter setValue:@(contrast) forKey:@"inputContrast"];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage *resultImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
returnresultImage;
}
15. 创建一张实时模糊效果 View (毛玻璃效果)
//Avilable in iOS 8.0 and later
+ (UIVisualEffectView *)effectViewWithFrame:(CGRect)frame{
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
effectView.frame = frame;
returneffectView;
}
16. 全屏截图
//全屏截图
+ (UIImage *)shotScreen{
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIGraphicsBeginImageContext(window.bounds.size);
[window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnimage;
}
17. 截取一张 view 生成图片
//截取view生成一张图片
+ (UIImage *)shotWithView:(UIView *)view{
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnimage;
}
18. 截取view中某个区域生成一张图片
//截取view中某个区域生成一张图片
+ (UIImage *)shotWithView:(UIView *)view scope:(CGRect)scope{
CGImageRef imageRef = CGImageCreateWithImageInRect([selfshotWithView:view].CGImage, scope);
UIGraphicsBeginImageContext(scope.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect rect = 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);
CGFloat dataKBytes = data.length/1000.0;
CGFloat maxQuality = 0.9f;
CGFloat lastData = 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;
}
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(NSIntegeri = 0; i < [string length]; i++){
inta = [string characterAtIndex:i];
if(a > 0x4e00 && a < 0x9fff) {
returnYES;
}
}
returnNO;
}
25. 判断字符串是否全部为数字
+ (BOOL)isAllNum:(NSString*)string{
unichar c;
for(inti=0; i
c=[string characterAtIndex:i];
if(!isdigit(c)) {
returnNO;
}
}
returnYES;
}
26. 绘制虚线
/*
** lineFrame: 虚线的 frame
** length: 虚线中短线的宽度
** spacing: 虚线中短线之间的间距
** color: 虚线中短线的颜色
*/
+ (UIView *)createDashedLineWithFrame:(CGRect)lineFrame
lineLength:(int)length
lineSpacing:(int)spacing
lineColor:(UIColor *)color{
UIView *dashedLine = [[UIView alloc] initWithFrame:lineFrame];
dashedLine.backgroundColor = [UIColor clearColor];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[shapeLayer setBounds:dashedLine.bounds];
[shapeLayer setPosition:CGPointMake(CGRectGetWidth(dashedLine.frame) / 2, CGRectGetHeight(dashedLine.frame))];
[shapeLayer setFillColor:[UIColor clearColor].CGColor];
[shapeLayer setStrokeColor:color.CGColor];
[shapeLayer setLineWidth:CGRectGetHeight(dashedLine.frame)];
[shapeLayer setLineJoin:kCALineJoinRound];
[shapeLayer setLineDashPattern:[NSArrayarrayWithObjects:[NSNumbernumberWithInt:length], [NSNumbernumberWithInt:spacing], nil]];
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddLineToPoint(path, NULL, CGRectGetWidth(dashedLine.frame), 0);
[shapeLayer setPath:path];
CGPathRelease(path);
[dashedLine.layer addSublayer:shapeLayer];
returndashedLine;
}