ios 小知识集锦

来源:互联网 发布:视频制作软件图标 编辑:程序博客网 时间:2024/05/12 09:01

//获取Documents下文件的路径

+ (NSString *)pathOfDocument:(NSString *)fileName {

    NSString *p = [NSStringstringWithFormat:@"Documents/%@",fileName];

    NSString *homePath =NSHomeDirectory(); //获取沙盒的根路径

    NSString *path = [homePathstringByAppendingPathComponent:p];

    return path;

}


//删除指定路径的文件

+ (BOOL)deleteFile:(NSString *)path {

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

    if ([fileManagerfileExistsAtPath:path]) {

        return [fileManagerremoveItemAtPath:path error:nil];

    }

    returnNO;

}


//计算字体占据空间的大小

//不同的ios版本,调用不同的方法,实现相同的功能

+(CGSize)sizeOfStr:(NSString *)str andFont:(UIFont *)font andMaxSize:(CGSize)size andLineBreakMode:(NSLineBreakMode)mode

{

    CGSize s;

    if ([[[UIDevicecurrentDevice]systemVersion]doubleValue]>=7.0) {

        NSMutableDictionary  *mdic=[NSMutableDictionarydictionary];

        [mdic setObject:[UIColorredColor] forKey:NSForegroundColorAttributeName];

        [mdic setObject:fontforKey:NSFontAttributeName];

        s = [str boundingRectWithSize:sizeoptions:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading

                           attributes:mdiccontext:nil].size;

    }

    else

    {

        s=[str sizeWithFont:fontconstrainedToSize:size lineBreakMode:mode];

    }

    return s;

}


//获取documents下的文件路径

+ (NSString *)getDocumentsPath:(NSString *)fileName {

    

    //两种获取document路径的方式

    //    NSString *documents = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

    

    NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    

    NSString *documents = [pathsobjectAtIndex:0];

    

    NSString *path = [documentsstringByAppendingPathComponent:fileName];

    

    return path;

}


// date 格式化为 string

+ (NSString*) stringFromFomate:(NSDate*) date formate:(NSString*)formate {

NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

[formatter setDateFormat:formate];

NSString *str = [formatterstringFromDate:date];

return str;

}


#pragma remark -日期固定格式转换

+ (NSDate *) dateFromFomate:(NSString *)datestring formate:(NSString*)formate {

NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    [formatter setDateFormat:formate];

    NSDate *date = [formatterdateFromString:datestring];

    return date;

}


// 时间string 格式化为 指定格式

+ (NSString *)fomateString:(NSString *)datestring {

    NSString *formate =@"E MMM d HH:mm:ss Z yyyy";

    NSDate *createDate = [UIUtilsdateFromFomate:datestring formate:formate];

    NSString *text = [UIUtilsstringFromFomate:createDate formate:@"MM-dd HH:mm"];

    return text;

}


#pragma remark -视图切换动画

+(void) animationWithButton:(UIView *)posterView listView:(UIView *)listView supView:(UIView *)supView{


    [UIViewbeginAnimations:nilcontext:nil];

    [UIViewsetAnimationDuration:0.5];

    [supView exchangeSubviewAtIndex:0withSubviewAtIndex:1];

    if (posterView.hidden) {

        posterView.hidden =NO;

        listView.hidden =YES;

        [UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromLeftforView:supView cache:YES];

    }else{

        posterView.hidden =YES;

        listView.hidden =NO;

        [UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRightforView:supView cache:YES];

    }

   [UIViewcommitAnimations];


}


#pragma remark -(显示MBProgressHUD)需要配合第三方框架MBProgressHUD使用

+(void) showHUD:(NSString *)title withView:(UIView *)view{

    

    [MBProgressHUDshowHUDAddedTo:view animated:YES].labelText = title;

}


#pragma remark -(显示MBProgressHUD一定时间自动隐藏需要配合第三方框架MBProgressHUD使用

+(void) showFinishHUD:(NSString *)title toView:(UIView *)view isSuccess:(BOOL) isSuc

{


    if (isSuc) {

        [MBProgressHUDshowSuccessWithText:title toView:view];

    }else{

        [MBProgressHUDshowErrorWithText:title toView:view];

    }

}


#pragma remark -(隐藏MBProgressHUD需要配合第三方框架MBProgressHUD使用

+(void) hideHUDForView:(UIView *)view

{


    [MBProgressHUDhideHUDForView:view animated:YES];

}


//获取网络状态

+(NetWorkStatus) isConnectionAvailable{

    

    NetWorkStatus status;

    

    Reachability *reach = [ReachabilityreachabilityWithHostName:@"www.baidu.com"];

    if ([reachcurrentReachabilityStatus] == NotReachable) {

        status = NetWorkNotReachable;

    }elseif ([reach currentReachabilityStatus] ==ReachableViaWiFi){

        status =  NetWorkIsWIFI;

    }elseif ([reach currentReachabilityStatus] ==ReachableViaWWAN){

        status = NetWorkIs3G;

    }

    return status;

}


//等比缩放图片

+(UIImage *) imageScaleWithImage:(UIImage *)sourceImage andSize:(CGSize)size{

    

    //size CGSize类型,即你所需要的图片尺寸

    UIGraphicsBeginImageContext(size);

    //指定了图片绘制区域

    [sourceImage drawInRect:CGRectMake(0,0, size.width, size.height)];

    UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;

}


/*邮箱验证 MODIFIED BY HELENSONG*/

+(BOOL)isValidateEmail:(NSString *)email

{

    NSString *emailRegex =@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

    NSPredicate *emailTest = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", emailRegex];

    return [emailTestevaluateWithObject:email];

}


/*手机号码验证 MODIFIED BY HELENSONG*/

+(BOOL) isValidateMobile:(NSString *)mobile

{

    //手机号以131514718开头,八个 \d 数字字符

    NSString *phoneRegex =@"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";

    NSPredicate *phoneTest = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",phoneRegex];

    //    NSLog(@"phoneTest is %@",phoneTest);

    return [phoneTestevaluateWithObject:mobile];

}


#pragma remark -设置消息数量

+(void)showBadgeValue:(NSString *)strBadgeValue andUIView :(UIView *)view

{

    for (UIView *subviewin view.subviews) {

        NSString *strClassName = [NSStringstringWithUTF8String:object_getClassName(subview)];

        if ([strClassNameisEqualToString:@"UITabBarButtonBadge"] ||

            [strClassName isEqualToString:@"_UIBadgeView"]) {

            [subview removeFromSuperview];

            break;

        }

    }

    if ([strBadgeValueintValue] > 0) {

        UITabBar *tabBar = [[UITabBaralloc] initWithFrame:CGRectMake(0,0, 320,50)];

        UITabBarItem *item =[[UITabBarItemalloc] initWithTitle:@""image:niltag:0];

        item.badgeValue = strBadgeValue;

        NSArray *array = [[NSArrayalloc] initWithObjects:item,nil];

        tabBar.items = array;

        //寻找

        for (UIView *viewTabin tabBar.subviews) {

            for (UIView *subviewin viewTab.subviews) {

                NSString *strClassName = [NSStringstringWithUTF8String:object_getClassName(subview)];

                if ([strClassNameisEqualToString:@"UITabBarButtonBadge"] ||

                    [strClassName isEqualToString:@"_UIBadgeView"]) {

                    //从原视图上移除

                    [subview removeFromSuperview];

                    

                    [view addSubview:subview];

                    subview.frame =CGRectMake(view.frame.size.width-subview.frame.size.width,0,

                                               subview.frame.size.width, subview.frame.size.height);

                }

            }

        }

    }

}


#pragma remark -移除消息数量

+(void)removeBadgeValue:(UIView *)view

{

    //

    for (UIView *subviewin view.subviews) {

        NSString *strClassName = [NSStringstringWithUTF8String:object_getClassName(subview)];

        if ([strClassNameisEqualToString:@"UITabBarButtonBadge"] ||

            [strClassName isEqualToString:@"_UIBadgeView"]) {

            [subview removeFromSuperview];

            break;

        }

    }

}


#pragma remark -获取本地沙盒目录下的文件

+(NSData *)getDocumentData:(NSString *)fileName{

    NSString *path =[[selfclass] getDocumentsPath:fileName];

    NSData *data =nil;

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

    if ([fileManagerfileExistsAtPath:path]) {

        data =[fileManager contentsAtPath:path];

    }

    return data;

}


#pragma remark -写入文件到本地

+(void)WriteDocumentData:(NSString *)fileUrl{

    [QFHTTPManagerrequestWithUrl:fileUrl Finish:^(NSData *data) {

        NSString *name = [fileUrllastPathComponent];

        NSString *path =[[selfclass] getDocumentsPath:name];

        NSFileManager *fileManager = [NSFileManagerdefaultManager];

        if ([fileManagerfileExistsAtPath:path]) {

            [fileManager removeItemAtPath:patherror:nil];

        }

        [data writeToFile:pathatomically:YES];

    } Failed:^(NSError *error) {

        

    }];

}


#pragma remark -个性化时间显示

+(NSString *)findendliyTime:(NSString *)dataTime{

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    //设置格式yyyy MMdd 小时hh(HH)分钟 mm ss MMM单月 eee周几 eeee星期几 a上午下午

    //与字符串保持一致

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    //现在的时间转换成字符串

    NSDate * nowDate = [NSDatedate];

    NSString * noewTime = [formatterstringFromDate:nowDate];

    //参数字符串转化成时间格式

    NSDate * date = [formatterdateFromString:dataTime];

    //参数时间距现在的时间差

    NSTimeInterval time = -[datetimeIntervalSinceNow];

    //上述时间差输出不同信息

    if (time <60) {

        return@"刚刚";

    }elseif (time <3600){

        int minute = time/60;

        NSString * minuteStr = [NSStringstringWithFormat:@"%d分钟前",minute];

        return  minuteStr;

    }else {

        //如果年不同输出某年某月某日

        if ([[dataTimesubstringToIndex:4]isEqualToString:[noewTime substringToIndex:4]]) {

            //截取字符串从下标为5开始 2

            NSRange rangeM =NSMakeRange(5,2);

            //如果月份不同输出某月某日某时

            if ([[dataTimesubstringWithRange:rangeM]isEqualToString:[noewTimesubstringWithRange:rangeM]]) {

                NSRange rangD =NSMakeRange(8,2);

                //如果日期不同输出某日某时

                if ([[dataTimesubstringWithRange:rangD]isEqualToString:[noewTimesubstringWithRange:rangD]]) {

                    NSRange rangeSSD =NSMakeRange(11,5);

                    NSString * Rstr = [NSStringstringWithFormat:@"今日%@",[dataTimesubstringWithRange:rangeSSD]];

                    return  Rstr;

                }else{

                    NSRange rangSD =NSMakeRange(5,5);

                    return [dataTimesubstringWithRange:rangSD];

                }

            }else{

                NSRange rangeSM =NSMakeRange(5,5);

                return [dataTimesubstringWithRange:rangeSM];

            }

        }else{

            return [dataTimesubstringToIndex:10];

        }

    }

}


#pragma remark -时间比较

+(BOOL)CompareTime:(NSString *)nowTime andNextTime:(NSString *)nextTime{

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    //设置格式yyyy MMdd 小时hh(HH)分钟 mm ss MMM单月 eee周几 eeee星期几 a上午下午

    //与字符串保持一致

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    //现在的时间转换成字符串

    NSDate * nextDate = [NSDatedate];

    if (nextTime) {

        nextDate = [formatter dateFromString:nextTime];

    }

    //参数字符串转化成时间格式

    NSDate * date = [formatterdateFromString:nowTime];

    //参数时间距现在的时间差

    NSTimeInterval time = -[datetimeIntervalSinceDate:nextDate];

    //上述时间差输出不同信息

    if (time <60) {

        returnNO;

    }

    returnYES;

}


#pragma remark -tableView 空余部分不显示 分割线

+(void)setExtraCellLineHidden: (UITableView *)tableView

{

    UIView *view = [UIViewnew];

    view.backgroundColor = [UIColorclearColor];

    [tableView setTableFooterView:view];

}


#pragma remark -json字符串转Dic

+(id)JSONValue:(NSString *)jsonStr

{

    jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\r\n"withString:@""];

    jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\n"withString:@""];

    jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\t"withString:@""];

    NSData* data = [jsonStrdataUsingEncoding:NSUTF8StringEncoding];

    __autoreleasingNSError* error = nil;

    id result = [NSJSONSerializationJSONObjectWithData:data options:kNilOptionserror:&error];

    if (error !=nil) returnnil;

    return result;

}


#pragma remark -md5 加密

+(NSString *) md5: (NSString *) inPutText

{

    constchar *cStr = [inPutText UTF8String];

    unsignedchar result[CC_MD5_DIGEST_LENGTH];

    CC_MD5(cStr,strlen(cStr), result);

    

    return [[NSStringstringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

             result[0], result[1], result[2], result[3],

             result[4], result[5], result[6], result[7],

             result[8], result[9], result[10], result[11],

             result[12], result[13], result[14], result[15]

             ] lowercaseString];

}


#pragma remark - JSON串转化为字典或者数组

+(id)toArrayOrNSDictionary:(NSData *)jsonData{

    NSError *error =nil;

    id jsonObject = [NSJSONSerializationJSONObjectWithData:jsonData

                                                   options:NSJSONReadingAllowFragments

                                                     error:&error];

    

    if (jsonObject !=nil && error == nil){

        return jsonObject;

    }else{

        // 解析错误

        returnnil;

    }

}


// 将字典或者数组转化为JSON

+(NSData *)toJSONData:(id)theData{

    

    NSError *error =nil;

    NSData *jsonData = [NSJSONSerializationdataWithJSONObject:theData

                                                      options:NSJSONWritingPrettyPrinted

                                                        error:&error];

    

    if ([jsonDatalength] && error == nil){

        return jsonData;

    }else{

        returnnil;

    }

}


#pragma remark -转化NSString

+(NSString *)formateToString:(id)value

{

    return [NSStringstringWithFormat:@"%@",value];

}


#pragma remark -获取随机颜色

+(UIColor *) randomColor

{

    CGFloat hue = (arc4random() % 256 /256.0 ); //0.0 to 1.0

    CGFloat saturation = (arc4random() % 128 /256.0 ) + 0.5;// 0.5 to 1.0,away from white

    CGFloat brightness = (arc4random() % 128 /256.0 ) + 0.5;//0.5 to 1.0,away from black

    return [UIColorcolorWithHue:hue saturation:saturationbrightness:brightness alpha:1];

}


#pragma remark -tableviewCell 上级控制器

+(UIViewController *)viewController:(UIView *)view

{

    UIResponder *next = [viewnextResponder];

    do {

        if ([nextisKindOfClass:[UIViewControllerclass]]) {

            return (UIViewController *)next;

        }

        

        next = [next nextResponder];

        

    } while (next !=nil);

    

    

    returnnil;

}


0 0