iOS常用公共方法

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);

输出结果如下:

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 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;

}



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

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;

}

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