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. 獲取指定路徑下某個(gè)文件的大小
//獲取文件大小
+ (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. 將字符串?dāng)?shù)組按照元素首字母順序進(jìn)行排序分組
//將字符串?dāng)?shù)組按照元素首字母順序進(jìn)行排序分組
+ (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];
????//創(chuàng)建27個(gè)分組數(shù)組
????for(inti = 0; i < indexedCollation.sectionTitles.count; i++) {
????????NSMutableArray*obj = [NSMutableArrayarray];
????????[objects addObject:obj];
????}
????NSMutableArray*keys = [NSMutableArrayarrayWithCapacity:objects.count];
????//按字母順序進(jìn)行分組
????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;
????}
????//去掉空數(shù)組
????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);
輸出結(jié)果如下:
7. 獲取當(dāng)前時(shí)間
//獲取當(dāng)前時(shí)間
//format: @"yyyy-MM-dd HH:mm:ss"、@"yyyy年MM月dd日 HH時(shí)mm分ss秒"
+ (NSString*)currentDateWithFormat:(NSString*)format{
????NSDateFormatter*dateFormatter = [[NSDateFormatteralloc] init];
????[dateFormatter setDateFormat:format];
????return[dateFormatter stringFromDate:[NSDatedate]];
}
8. 計(jì)算上次日期距離現(xiàn)在多久, 如 xx 小時(shí)前、xx 分鐘前等
/**
?*? 計(jì)算上次日期距離現(xiàn)在多久
?*
?*? @param lastTime??? 上次日期(需要和格式對應(yīng))
?*? @param format1???? 上次日期格式
?*? @param currentTime 最近日期(需要和格式對應(yīng))
?*? @param format2???? 最近日期格式
?*
?*? @return xx分鐘前滥崩、xx小時(shí)前钙皮、xx天前
?*/
+ (NSString*)timeIntervalFromLastTime:(NSString*)lastTime
????????????????????????lastTimeFormat:(NSString*)format1
?????????????????????????ToCurrentTime:(NSString*)currentTime
?????????????????????currentTimeFormat:(NSString*)format2{
????//上次時(shí)間
????NSDateFormatter*dateFormatter1 = [[NSDateFormatteralloc]init];
????dateFormatter1.dateFormat = format1;
????NSDate*lastDate = [dateFormatter1 dateFromString:lastTime];
????//當(dāng)前時(shí)間
????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];
????//上次時(shí)間
????NSDate*lastDate = [lastTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:lastTime]];
????//當(dāng)前時(shí)間
????NSDate*currentDate = [currentTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:currentTime]];
????//時(shí)間間隔
????NSIntegerintevalTime = [currentDate timeIntervalSinceReferenceDate] - [lastDate timeIntervalSinceReferenceDate];
????//秒崇摄、分、小時(shí)屹蚊、天汹粤、月嘱兼、年
????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小時(shí)前",(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"]);
輸出結(jié)果如下:
9. 判斷手機(jī)號碼格式是否正確
//判斷手機(jī)號碼格式是否正確
+ (BOOL)valiMobile:(NSString*)mobile{
????mobile = [mobile stringByReplacingOccurrencesOfString:@" "withString:@""];
????if(mobile.length != 11)
????{
????????returnNO;
????}else{
????????/**
?????????* 移動號段正則表達(dá)式
?????????*/
????????NSString*CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
????????/**
?????????* 聯(lián)通號段正則表達(dá)式
?????????*/
????????NSString*CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
????????/**
?????????* 電信號段正則表達(dá)式
?????????*/
????????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. 判斷郵箱格式是否正確
//利用正則表達(dá)式驗(yàn)證
+ (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. 將十六進(jìn)制顏色轉(zhuǎn)換為 UIColor 對象
//將十六進(jìn)制顏色轉(zhuǎn)換為 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. 對圖片進(jìn)行濾鏡處理
#pragma mark - 對圖片進(jìn)行濾鏡處理
// 懷舊 --> CIPhotoEffectInstant???????????????????????? 單色 --> CIPhotoEffectMono
// 黑白 --> CIPhotoEffectNoir??????????????????????????? 褪色 --> CIPhotoEffectFade
// 色調(diào) --> 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. 對圖片進(jìn)行模糊處理
#pragma mark - 對圖片進(jìn)行模糊處理
// CIGaussianBlur ---> 高斯模糊
// CIBoxBlur????? ---> 均值模糊(Available in iOS 9.0 and later)
// CIDiscBlur???? ---> 環(huán)形卷積模糊(Available in iOS 9.0 and later)
// CIMedianFilter ---> 中值模糊, 用于消除圖像噪點(diǎn), 無需設(shè)置radius(Available in iOS 9.0 and later)
// CIMotionBlur?? ---> 運(yùn)動模糊, 用于模擬相機(jī)移動拍攝時(shí)的掃尾效果(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. 調(diào)整圖片飽和度睁壁、亮度潘明、對比度
/**
?*? 調(diào)整圖片飽和度, 亮度, 對比度
?*
?*? @param image????? 目標(biāo)圖片
?*? @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. 創(chuàng)建一張實(shí)時(shí)模糊效果 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中某個(gè)區(qū)域生成一張圖片
//截取view中某個(gè)區(qū)域生成一張圖片
+ (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. 判斷字符串中是否含有某個(gè)字符串
+ (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. 判斷字符串是否全部為數(shù)字
+ (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;
}