iOS常用公共方法

  1. 获取磁盘总空间大小
    [Objective-C] 查看源文件 复制代码
    //磁盘总空间
    • (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;

}

  1. 获取磁盘可用空间大小
    //磁盘可用空间
    • (CGFloat)diskOfFreeSizeMBytes{
      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:NSFileSystemFreeSize];
    size = [number floatValue]/1024/1024;
}
return size;

}

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

    • (long long)fileSizeAtPath:(NSString *)filePath{
      NSFileManager *fileManager = [NSFileManager defaultManager];
      if (![fileManager fileExistsAtPath:filePath]) return 0;
      return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
      }
  2. 获取文件夹下所有文件的大小
    //获取文件夹下所有文件的大小

    • (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;
      }
  3. 获取字符串(或汉字)首字母
    //获取字符串(或汉字)首字母

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

输出结果如下:

输出结果

  1. 获取当前时间
    //获取当前时间
    //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]];
      }
  2. 计算上次日期距离现在多久, 如 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 = [[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 @”“;
    }

使用如下:
[Objective-C] 查看源文件 复制代码
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”]);

输出结果如下:

输出结果

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

    • (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;
      }
      }
      }

  2. 判断邮箱格式是否正确
    //利用正则表达式验证

    • (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];
      }
  3. 将十六进制颜色转换为 UIColor 对象
    //将十六进制颜色转换为 UIColor 对象

    • (UIColor )colorWithHexString:(NSString )color{
      NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] 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
      NSRange range;
      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 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];
      }
  4. 对图片进行滤镜处理

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

  1. 对图片进行模糊处理

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

  1. 调整图片饱和度、亮度、对比度
    /**

    • 调整图片饱和度, 亮度, 对比度
      *
    • @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);
    return resultImage;
    }

  2. 创建一张实时模糊效果 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;
      }
  3. 全屏截图
    //全屏截图

    • (UIImage *)shotScreen{
      UIWindow *window = [UIApplication sharedApplication].keyWindow;
      UIGraphicsBeginImageContext(window.bounds.size);
      [window.layer renderInContext:UIGraphicsGetCurrentContext()];
      UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      return image;
      }
  4. 截取一张 view 生成图片
    //截取view生成一张图片

    • (UIImage )shotWithView:(UIView )view{
      UIGraphicsBeginImageContext(view.bounds.size);
      [view.layer renderInContext:UIGraphicsGetCurrentContext()];
      UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      return image;
      }
  5. 截取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;
}

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

//压缩图片到指定文件大小
+ (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;
}

  1. 获取设备 IP 地址
    需要先引入下头文件:

import

import

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值