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;

}

returnsize;

}

2.磁盘可用空间大小

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

}

returnsize;

}

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

+ (NSDictionary *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array

{

if(array.count == 0) {

returnnil;

}

for(id obj in array) {

if(![obj isKindOfClass:[NSStringclass]]) {

returnnil;

}

}

UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];

NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];

//创建27个分组数组

for(inti = 0; i < indexedCollation.sectionTitles.count; i++) {

NSMutableArray *obj = [NSMutableArray array];

[objects addObject:obj];

}

NSMutableArray *keys = [NSMutableArray arrayWithCapacity:objects.count];

//按字母顺序进行分组

NSInteger lastIndex = -1;

for(inti = 0; i < array.count; i++) {

NSInteger index = [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 = [self firstCharacterWithString:str];

[keys addObject:key];

}

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

[dic setObject:objects forKey:keys];

returndic;

}

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

+ (NSDictionary *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array

{

if(array.count == 0) {

returnnil;

}

for(id obj in array) {

if(![obj isKindOfClass:[NSStringclass]]) {

returnnil;

}

}

UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];

NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];

//创建27个分组数组

for(inti = 0; i < indexedCollation.sectionTitles.count; i++) {

NSMutableArray *obj = [NSMutableArray array];

[objects addObject:obj];

}

NSMutableArray *keys = [NSMutableArray arrayWithCapacity:objects.count];

//按字母顺序进行分组

NSInteger lastIndex = -1;

for(inti = 0; i < array.count; i++) {

NSInteger index = [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 = [self firstCharacterWithString:str];

[keys addObject:key];

}

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

[dic setObject:objects forKey:keys];

returndic;

}

5.对图片进行滤镜处理

// 怀旧 --> 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;

}

6.对图片进行模糊处理

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

}

}

7.跳转到系统的相关界面:

/*

*  需要添加一个字段

*  蓝色的项目工程文件 -> Info -> URL Types -> 添加一个 -> 设置URL  Sch**** 为 prefs的url

NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];

[[UIApplication sharedApplication] openURL:url];

跳转到其他的界面的字段(不全,详细看链接)

About — prefs:root=General&path=About

Accessibility — prefs:root=General&path=ACCESSIBILITY

AirplaneModeOn— prefs:root=AIRPLANE_MODE

Auto-Lock — prefs:root=General&path=AUTOLOCK

Brightness — prefs:root=Brightness

Bluetooth — prefs:root=General&path=Bluetooth

Date& Time — prefs:root=General&path=DATE_AND_TIME

FaceTime — prefs:root=FACETIME

General— prefs:root=General

原文链接:http://www.jianshu.com/p/19602f48309b

*/

8.创建一张实时模糊效果 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;

}

9.设置Label的行间距

+ (void)setLineSpaceWithString:(UILabel *)label

{

NSMutableAttributedString *attributedString =

[[NSMutableAttributedString alloc] initWithString:label.text];

NSMutableParagraphStyle *paragraphStyle =  [[NSMutableParagraphStyle alloc] init];

[paragraphStyle setLineSpacing:3];

//调整行间距

[attributedString addAttribute:NSParagraphStyleAttributeName

value:paragraphStyle

range:NSMakeRange(0, [label.text length])];

label.attributedText = attributedString;

}

10.让Plain风格的TableView的区头可以”不悬停”(可以直接百度搜到):

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

if(scrollView == self.myTab) {

CGFloat sectionHeaderHeight = 40;

if(scrollView.contentOffset.y=0) {

scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);

}elseif(scrollView.contentOffset.y>=sectionHeaderHeight) {

scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);

}

}

}

11. 判断手机号码格式是否正确,利用正则表达式验证

+ (BOOL)isMobileNumber:(NSString *)mobileNum

{

if (mobileNum.length != 11)

{

return NO;

}

/**

* 手机号码:

* 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9]

* 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705

* 联通号段: 130,131,132,155,156,185,186,145,176,1709

* 电信号段: 133,153,180,181,189,177,1700

*/

NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|70)\d{8}$";

/**

* 中国移动:China Mobile

* 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705

*/

NSString *CM = @"(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\d{8}$)|(^1705\d{7}$)";

/**

* 中国联通:China Unicom

* 130,131,132,155,156,185,186,145,176,1709

*/

NSString *CU = @"(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\d{8}$)|(^1709\d{7}$)";

/**

* 中国电信:China Telecom

* 133,153,180,181,189,177,1700

*/

NSString *CT = @"(^1(33|53|77|8[019])\d{8}$)|(^1700\d{7}$)";

NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];

NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];

NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];

NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];

if (([regextestmobile evaluateWithObject:mobileNum] == YES)

|| ([regextestcm evaluateWithObject:mobileNum] == YES)

|| ([regextestct evaluateWithObject:mobileNum] == YES)

|| ([regextestcu evaluateWithObject:mobileNum] == YES))

{

return YES;

}

else

{

return NO;

}

}

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

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

}

13. 判断字符串中是否含有空格

+ (BOOL)isHaveSpaceInString:(NSString *)string{

NSRange _range = [string rangeOfString:@" "];

if (_range.location != NSNotFound) {

return YES;

}else {

return NO;

}

}

14. 判断字符串中是否含有中文

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

}

15. 判断字符串是否全部为数字

+ (BOOL)isAllNum:(NSString *)string{    unichar c;    for (int i=0; i<="" pre="">

判断是否是纯数字

+ (BOOL)isPureInteger:(NSString *)str {

NSScanner *scanner = [NSScanner scannerWithString:str];

NSInteger val;

return [scanner scanInteger:&val] && [scanner isAtEnd];

}

16. 过滤一些特殊字符 似乎只能去除头尾的特殊字符(不准)

+ (NSString *)filterSpecialWithString:(NSString *)string

{

// 定义一个特殊字符的集合

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:

@"@/:;: ;()?「」"、[]{}#%-*+=_|~<>$?^?'@#$%^&*()_+'"];

// 过滤字符串的特殊字符

NSString *newString = [string stringByTrimmingCharactersInSet:set];

return newString;

}

17. 让iOS应用直接退出

+ (void)backOutApp {

UIWindow *window = [[UIApplication sharedApplication].delegate window];

[UIView animateWithDuration:1.0f animations:^{

window.alpha = 0;

} completion:^(BOOL finished) {

exit(0);

}];

}

18. NSArray 快速求总和、最大值、最小值、平均值

+ (NSString *)caculateArray:(NSArray *)array

{

CGFloat sum = [[array valueForKeyPath:@"@sum.floatValue"] floatValue];

CGFloat avg = [[array valueForKeyPath:@"@avg.floatValue"] floatValue];

CGFloat max =[[array valueForKeyPath:@"@max.floatValue"] floatValue];

CGFloat min =[[array valueForKeyPath:@"@min.floatValue"] floatValue];

NSLog(@"%fn%fn%fn%f",sum,avg,max,min);

return [NSString stringWithFormat:@"%f",sum];

}

19. 验证身份证(本人试过,还挺准的)

+ (BOOL)checkIdentityCardNo:(NSString*)value {

value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSInteger length =0;

if (!value) {

return NO;

}else {

length = value.length;

if (length !=15 && length !=18) {

return NO;

}

}

// 省份代码

NSArray *areasArray =@[@"11",@"12", @"13",@"14", @"15",@"21", @"22",@"23", @"31",@"32", @"33",@"34", @"35",@"36", @"37",@"41", @"42",@"43", @"44",@"45", @"46",@"50", @"51",@"52", @"53",@"54", @"61",@"62", @"63",@"64", @"65",@"71", @"81",@"82", @"91"];

NSString *valueStart2 = [value substringToIndex:2];

BOOL areaFlag =NO;

for (NSString *areaCode in areasArray) {

if ([areaCode isEqualToString:valueStart2]) {

areaFlag =YES;

break;

}

}

if (!areaFlag) {

return false;

}

NSRegularExpression *regularExpression;

NSUInteger numberofMatch;

NSInteger year =0;

switch (length) {

case 15:

year = [[value substringWithRange:NSMakeRange(6,2)] integerValue] +1900;

if (year %4 ==0 || (year 0 ==0 && year %4 ==0)) {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"

options:NSRegularExpressionCaseInsensitive

error:nil];//测试出生日期的合法性

}else {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"

options:NSRegularExpressionCaseInsensitive

error:nil];//测试出生日期的合法性

}

numberofMatch = [regularExpression numberOfMatchesInString:value                                                options:NSMatchingReportProgress

range:NSMakeRange(0, value.length)];

if(numberofMatch >0) {

return YES;

}else {

return NO;

}

case 18:

year = [value substringWithRange:NSMakeRange(6,4)].intValue;

if (year %4 ==0 || (year 0 ==0 && year %4 ==0)) {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"

options:NSRegularExpressionCaseInsensitive                                                                    error:nil];//测试出生日期的合法性

}else {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"                                                                      options:NSRegularExpressionCaseInsensitive                                                                    error:nil];//测试出生日期的合法性

}

numberofMatch = [regularExpression numberOfMatchesInString:value                                                options:NSMatchingReportProgress                                                    range:NSMakeRange(0, value.length)];

if(numberofMatch >0) {

int S = ([value substringWithRange:NSMakeRange(0,1)].intValue + [value substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([value substringWithRange:NSMakeRange(1,1)].intValue + [value substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([value substringWithRange:NSMakeRange(2,1)].intValue + [value substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([value substringWithRange:NSMakeRange(3,1)].intValue + [value substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([value substringWithRange:NSMakeRange(4,1)].intValue + [value substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([value substringWithRange:NSMakeRange(5,1)].intValue + [value substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([value substringWithRange:NSMakeRange(6,1)].intValue + [value substringWithRange:NSMakeRange(16,1)].intValue) *2 + [value substringWithRange:NSMakeRange(7,1)].intValue *1 + [value substringWithRange:NSMakeRange(8,1)].intValue *6 + [value substringWithRange:NSMakeRange(9,1)].intValue *3;

int Y = S ;

NSString *M =@"F";

NSString *JYM =@"10X98765432";

M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位

if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {

return YES;// 检测ID的校验位

}else {

return NO;

}

}else {

return NO;

}

default:

return false;

}

}

20. 设置Label里的字符有不同的颜色

//可根据自己的需求进行增删改

- (void)stringColorSet {

NSString*string = @"如何使得Label里的字符有不同的颜色?";

NSRange range = [string rangeOfString: @"Label"];

NSMutableAttributedString*attribute = [[NSMutableAttributedString alloc] initWithString: string];

[attribute addAttributes: @{NSForegroundColorAttributeName: [UIColor redColor]}range: range];

[attribute addAttributes: @{NSForegroundColorAttributeName: [UIColor greenColor]}range: NSMakeRange(0, range.location)];

[attribute addAttributes: @{NSForegroundColorAttributeName: [UIColor cyanColor]}range: NSMakeRange(range.location+ range.length, 5)];

UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0.0f, 100.0f, 320.0f, 100.0f)];

[label setText: string];

[label setAttributedText: attribute];

}

如果上面的文章对您在开发中能派上用场,请关注或点个赞吧,我会不定期的给您分享或推荐一些好的文章哦^_^

你可能感兴趣的:(iOS开发中的一些常用方法)