iOS 常用公共方法
生活随笔
收集整理的這篇文章主要介紹了
iOS 常用公共方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 獲取磁盤總空間大小
//磁盤總空間 + (CGFloat)diskOfAllSizeMBytes{CGFloat size = 0.0;NSError *error;NSDictionary *dic = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];if (error) { #ifdef DEBUGNSLog(@"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 = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];if (error) { #ifdef DEBUGNSLog(@"error: %@", error.localizedDescription); #endif}else{NSNumber *number = [dic objectForKey:NSFileSystemFreeSize];size = [number floatValue]/1024/1024;}return size; } 復制代碼3. 獲取指定路徑下某個文件的大小
//獲取文件大小 + (long long)fileSizeAtPath:(NSString *)filePath{NSFileManager *fileManager = [NSFileManager defaultManager];if (![fileManager fileExistsAtPath:filePath]) return 0;return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize]; } 復制代碼4. 獲取文件夾下所有文件的大小
//獲取文件夾下所有文件的大小 + (long long)folderSizeAtPath:(NSString *)folderPath{NSFileManager *fileManager = [NSFileManager defaultManager];if (![fileManager fileExistsAtPath:folderPath]) return 0;NSEnumerator *filesEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];NSString *fileName;long long folerSize = 0;while ((fileName = [filesEnumerator nextObject]) != nil) {NSString *filePath = [folderPath stringByAppendingPathComponent:fileName];folerSize += [self fileSizeAtPath:filePath];}return folerSize; } 復制代碼5. 獲取字符串(或漢字)首字母
//獲取字符串(或漢字)首字母 + (NSString *)firstCharacterWithString:(NSString *)string{NSMutableString *str = [NSMutableString stringWithString: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) {return nil;}for (id obj in array) {if (![obj isKindOfClass:[NSString class]]) {return nil;}}UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];//創建27個分組數組for (int i = 0; i < indexedCollation.sectionTitles.count; i++) {NSMutableArray *obj = [NSMutableArray array];[objects addObject:obj];}NSMutableArray *keys = [NSMutableArray arrayWithCapacity:objects.count];//按字母順序進行分組NSInteger lastIndex = -1;for (int i = 0; i < array.count; i++) {NSInteger index = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];[[objects objectAtIndex:index] addObject:array[i]];lastIndex = index;}//去掉空數組for (int i = 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 = [self firstCharacterWithString:str];[keys addObject:key];}NSMutableDictionary *dic = [NSMutableDictionary dictionary];[dic setObject:objects forKey:keys];return dic; }//獲取字符串(或漢字)首字母 + (NSString *)firstCharacterWithString:(NSString *)string{NSMutableString *str = [NSMutableString stringWithString: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 = [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:format];return [dateFormatter stringFromDate:[NSDate date]]; } 復制代碼8. 計算上次日期距離現在多久, 如 xx 小時前、xx 分鐘前等
/*** 計算上次日期距離現在多久** @param lastTime 上次日期(需要和格式對應)* @param format1 上次日期格式* @param currentTime 最近日期(需要和格式對應)* @param format2 最近日期格式** @return xx分鐘前、xx小時前、xx天前*/ + (NSString *)timeIntervalFromLastTime:(NSString *)lastTimelastTimeFormat:(NSString *)format1ToCurrentTime:(NSString *)currentTimecurrentTimeFormat:(NSString *)format2{//上次時間NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc]init];dateFormatter1.dateFormat = format1;NSDate *lastDate = [dateFormatter1 dateFromString:lastTime];//當前時間NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc]init];dateFormatter2.dateFormat = format2;NSDate *currentDate = [dateFormatter2 dateFromString:currentTime];return [Utilities timeIntervalFromLastTime:lastDate ToCurrentTime:currentDate]; }+ (NSString *)timeIntervalFromLastTime:(NSDate *)lastTime ToCurrentTime:(NSDate *)currentTime{NSTimeZone *timeZone = [NSTimeZone systemTimeZone];//上次時間NSDate *lastDate = [lastTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:lastTime]];//當前時間NSDate *currentDate = [currentTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:currentTime]];//時間間隔NSInteger intevalTime = [currentDate timeIntervalSinceReferenceDate] - [lastDate timeIntervalSinceReferenceDate];//秒、分、小時、天、月、年NSInteger minutes = intevalTime / 60;NSInteger hours = intevalTime / 60 / 60;NSInteger day = intevalTime / 60 / 60 / 24;NSInteger month = intevalTime / 60 / 60 / 24 / 30;NSInteger yers = intevalTime / 60 / 60 / 24 / 365;if (minutes <= 10) {return @"剛剛";}else if (minutes < 60){return [NSString stringWithFormat: @"%ld分鐘前",(long)minutes];}else if (hours < 24){return [NSString stringWithFormat: @"%ld小時前",(long)hours];}else if (day < 30){return [NSString stringWithFormat: @"%ld天前",(long)day];}else if (month < 12){NSDateFormatter * df =[[NSDateFormatter alloc]init];df.dateFormat = @"M月d日";NSString * time = [df stringFromDate:lastDate];return time;}else if (yers >= 1){NSDateFormatter * df =[[NSDateFormatter alloc]init];df.dateFormat = @"yyyy年M月d日";NSString * time = [df stringFromDate:lastDate];return time;}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){return NO;}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 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];BOOL isMatch1 = [pred1 evaluateWithObject:mobile];NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];BOOL isMatch2 = [pred2 evaluateWithObject:mobile];NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];BOOL isMatch3 = [pred3 evaluateWithObject:mobile];if (isMatch1 || isMatch2 || isMatch3) {return YES;}else{return NO;}} } 復制代碼10. 判斷郵箱格式是否正確
//利用正則表達式驗證 + (BOOL)isAvailableEmail:(NSString *)email {NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];return [emailTest evaluateWithObject:email]; } 復制代碼11. 將十六進制顏色轉換為 UIColor 對象
//將十六進制顏色轉換為 UIColor 對象 + (UIColor *)colorWithHexString:(NSString *)color{NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];// String should be 6 or 8 charactersif ([cString length] < 6) {return [UIColor clearColor];}// 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 [UIColor clearColor];// Separate into r, g, b substringsNSRange range;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 valuesunsigned int r, g, b;[[NSScanner scannerWithString:rString] scanHexInt:&r];[[NSScanner scannerWithString:gString] scanHexInt:&g];[[NSScanner scannerWithString: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);return resultImage; } 復制代碼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);return resultImage;}else{return nil;} } 復制代碼14. 調整圖片飽和度、亮度、對比度
/*** 調整圖片飽和度, 亮度, 對比度** @param image 目標圖片* @param saturation 飽和度* @param brightness 亮度: -1.0 ~ 1.0* @param contrast 對比度**/ + (UIImage *)colorControlsWithOriginalImage:(UIImage *)imagesaturation:(CGFloat)saturationbrightness:(CGFloat)brightnesscontrast:(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);return resultImage; } 復制代碼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;return effectView; } 復制代碼16. 全屏截圖
//全屏截圖 + (UIImage *)shotScreen{UIWindow *window = [UIApplication sharedApplication].keyWindow;UIGraphicsBeginImageContext(window.bounds.size);[window.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return image; } 復制代碼17. 截取一張 view 生成圖片
//截取view生成一張圖片 + (UIImage *)shotWithView:(UIView *)view{UIGraphicsBeginImageContext(view.bounds.size);[view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return image; } 復制代碼18. 截取view中某個區域生成一張圖片
//截取view中某個區域生成一張圖片 + (UIImage *)shotWithView:(UIView *)view scope:(CGRect)scope{CGImageRef imageRef = CGImageCreateWithImageInRect([self shotWithView: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);return image; } 復制代碼19. 壓縮圖片到指定尺寸大小
//壓縮圖片到指定尺寸大小 + (UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{UIImage *resultImage = image;UIGraphicsBeginImageContext(size);[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];UIGraphicsEndImageContext();return resultImage; } 復制代碼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;}}return data; } 復制代碼21. 獲取設備 IP 地址 需要先引入下頭文件:
#import <ifaddrs.h> #import <arpa/inet.h> 復制代碼//獲取設備 IP 地址 + (NSString *)getIPAddress {NSString *address = @"error";struct ifaddrs *interfaces = NULL;struct ifaddrs *temp_addr = NULL;int success = 0;success = getifaddrs(&interfaces);if (success == 0) {temp_addr = interfaces;while(temp_addr != NULL) {if(temp_addr->ifa_addr->sa_family == AF_INET) {if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];}}temp_addr = temp_addr->ifa_next;}}freeifaddrs(interfaces);return address; } 復制代碼22. 判斷字符串中是否含有空格
+ (BOOL)isHaveSpaceInString:(NSString *)string{NSRange _range = [string rangeOfString:@" "];if (_range.location != NSNotFound) {return YES;}else {return NO;} } 復制代碼24. 判斷字符串中是否含有中文
+ (BOOL)isHaveChineseInString:(NSString *)string{for(NSInteger i = 0; i < [string length]; i++){int a = [string characterAtIndex:i];if (a > 0x4e00 && a < 0x9fff) {return YES;}}return NO; } 復制代碼25. 判斷字符串是否全部為數字
+ (BOOL)isAllNum:(NSString *)string{unichar c;for (int i=0; i<string.length; i++) {c=[string characterAtIndex:i];if (!isdigit(c)) {return NO;}}return YES; } 復制代碼26. 繪制虛線
/*** lineFrame: 虛線的 frame** length: 虛線中短線的寬度** spacing: 虛線中短線之間的間距** color: 虛線中短線的顏色 */ + (UIView *)createDashedLineWithFrame:(CGRect)lineFramelineLength:(int)lengthlineSpacing:(int)spacinglineColor:(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:[NSArray arrayWithObjects:[NSNumber numberWithInt:length], [NSNumber numberWithInt: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];return dashedLine; } 復制代碼轉載于:https://juejin.im/post/5c1a0dfc5188257dc54ad7af
總結
以上是生活随笔為你收集整理的iOS 常用公共方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《星露谷物语》7 周年,Steam 24
- 下一篇: 诺基亚宣布:全球焕新企业战略和技术战略