您的位置:首页 > 移动开发 > IOS开发

iOS常用公共方法

2016-06-03 15:40 471 查看
获取磁盘总空间大小

//磁盘总空间
+ (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;
}


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

//获取文件大小
+ (long long)fileSizeAtPath:(NSString *)filePath{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath]) return 0;
return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
}


获取文件夹下所有文件的大小

//获取文件夹下所有文件的大小
+ (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;
}


获取字符串(或汉字)首字母

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


将字符串数组按照元素首字母顺序进行排序分组

//将字符串数组按照元素首字母顺序进行排序分组
+ (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]];
}


计算上次日期距离现在多久, 如 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 @”“;

}

使用如下:

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∗CUNUM=@”((13[0−2])|(145)|(15[5−6])|(176)|(18[5,6]))\d8|(1709)\d7”;

/**

* 电信号段正则表达式

*/

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

}

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 )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"];
[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

import

/*
** 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:[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;
}


文/jianshu_wl(简书作者)

原文链接:http://www.jianshu.com/p/997f96d2a0b5

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: