美文网首页
常用基本方法

常用基本方法

作者: 菠萝吹雪xs | 来源:发表于2021-07-08 00:08 被阅读0次

系统

//获取iPhone自带的语言种类
-(NSArray *)getlangeArr{    
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
    return languages;
}
/// 获取软件当前版本号
- (NSString *) getCurrentVersion {
    return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
}
/// 获取名字
- (NSString *) getProductName {
    NSString* prodName =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
    return prodName;
}
/// 获取系统版本
+ (NSString *) getCurrentSystemVersion {
    return [[UIDevice currentDevice] systemVersion];
}


判空

//字符串判空
-(BOOL )strIsEmpty:(NSString *)str{
    NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
    NSString *trimmedStr = [str stringByTrimmingCharactersInSet:set];
    if (!trimmedStr.length) {
        return YES;
    }else if ([str isKindOfClass:[NSNull class]]) {
        return YES;
    }else if (str == nil || str == NULL || [str isEqualToString:@"(null)"] || [str isEqualToString:@"null"] ||[str isEqualToString:@""]) {
        return YES;
    }
    return NO;
}

//数组判空
-(BOOL)arrIsEmpty:(NSArray *)array{
    if (array == nil) {
        return YES;
    }
    if (array.count<1) {
        return YES;
    }
    if ([array isKindOfClass:[NSNull class]]) {
        return YES;
    }
    if (![array isKindOfClass:[NSArray class]]){
        return YES;
    }
    return NO;
}
//字典判空
-(BOOL)dicIsEmpty:(NSDictionary *)dic{
    if (dic == nil) {
        return YES;
    }
    if ([dic isKindOfClass:[NSNull class]]) {
        return YES;
    }
    if (![dic isKindOfClass:[NSDictionary class]]){
        return YES;
    }
    return NO;
}

基本类型操作及转换

//判断是否包含中文
- (BOOL)containChinese:(NSString *)str {
    for(int i=0; i< [str length];i++){
        int a = [str characterAtIndex:i];
        if( a > 0x4e00 && a < 0x9fff){
            return YES;
        }
    }
    return NO;
}

//遍历字符串并输出成数组
-(NSArray *)getStrArray:(NSString *)str{
    NSMutableArray *array=[NSMutableArray array];
    for(int i =0; i < [str length]; i++)
    {
        NSString *everyStr = [str substringWithRange:NSMakeRange(i,1)];
        NSString *getStr=[NSString stringWithFormat:@"%@",everyStr];
        [array addObject:getStr];
    }
    return array;
}

//字典转数组
-(NSArray *)getArry:(NSDictionary *)fromDic{
    NSArray *keys = [fromDic allKeys];
    NSMutableArray *tmp=[NSMutableArray array];
    for (NSInteger i = 0; i < keys.count; i++)
    {
        NSString *everyStr=keys[i];
        [tmp addObject:everyStr];
    }
    NSArray *noewArry=[NSArray arrayWithArray:tmp];
    return noewArry;
}

//将字典中的某一项抽出组成新的数组
-(NSMutableArray *)wantoNsmutArr:(NSArray *)forArr anduseForKey:(NSString *)useValue{
    NSMutableArray *wantToList=[NSMutableArray array];
    for ( NSInteger i=0; i<forArr.count; i++) {
        NSDictionary  *welpicDic=forArr[i];
        NSString *welpicDicStr;
        if ([welpicDic objectForKey:useValue]) {
            welpicDicStr=[welpicDic objectForKey:useValue];
        }else{
            welpicDicStr=@"";
        }
        [wantToList addObject:welpicDicStr];
    }
    return wantToList;
}

//截取两个字符串之间的字符
-(NSString *)afterInter:(NSString *)fromStr andStar:(NSString *)starRangStr andEnd:(NSString *)endStr{
    NSString *result;
    NSRange startRange = [fromStr rangeOfString:starRangStr];
    NSRange endRange = [fromStr rangeOfString:endStr];
    NSRange range = NSMakeRange(startRange.location + startRange.length, endRange.location - startRange.location - startRange.length);
    result = [fromStr substringWithRange:range];
    return result;
}

//截取某个字符和最后一次出现的字符之间的字符串
-(NSString *)intercept:(NSString *)fromStr beginRangStr:(NSString *)starRangStr lastRange:(NSString *)lastStr{
    NSString *result;
    NSArray *rangindexarr=[self rangeOfSubString:lastStr inString:fromStr];
    NSRange startRange = [fromStr rangeOfString:starRangStr];
    NSRange lastRange = {[rangindexarr.lastObject integerValue],1};
    NSRange range = NSMakeRange(startRange.location + startRange.length, lastRange.location - startRange.location - startRange.length);
    result = [fromStr substringWithRange:range];
    return result;
}
- (NSArray *)rangeOfSubString:(NSString*)subStr inString:(NSString*)string {
    NSMutableArray *rangeArray = [NSMutableArray array];
    NSString *string1 = [string stringByAppendingString:subStr];
    NSString *temp;
    for(int i =0; i < string.length; i ++) {
        temp = [string1 substringWithRange:NSMakeRange(i, subStr.length)];
        if ([temp isEqualToString:subStr]) {
            NSRange range = {i,subStr.length};
            NSInteger index=range.location;
            [rangeArray addObject: [NSString stringWithFormat:@"%ld",(long)index]];
        }
    }
    return rangeArray;
}

//识别字符串中存在的url
- (NSArray *)getURLFromStr:(NSString *)urlStr {
    NSError *error;
    //可以识别url的正则表达式
    NSString *regulaStr = @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regulaStr
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    NSArray *arrayOfAllMatches = [regex matchesInString:urlStr
                                                options:0
                                                  range:NSMakeRange(0, [urlStr length])];
    
    //NSString *subStr;
    NSMutableArray *arr=[[NSMutableArray alloc] init];
    
    for (NSTextCheckingResult *match in arrayOfAllMatches){
        NSString* substringForMatch;
        substringForMatch = [string substringWithRange:match.range];
        [arr addObject:substringForMatch];
    }
    return arr;
}

//data转string
- (NSString *)jsonToString:(id)data {
    if(data == nil) { return nil; }
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:NSJSONWritingPrettyPrinted error:nil];
    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
- (NSData *)UTF8Data:(NSData *)data {
    //保存结果
    NSMutableData *resData = [[NSMutableData alloc] initWithCapacity:data.length];
    NSData *replacement = [@"�" dataUsingEncoding:NSUTF8StringEncoding];
    uint64_t index = 0;
    const uint8_t *bytes = data.bytes;
    long dataLength = (long) data.length;
    while (index < dataLength) {
        uint8_t len = 0;
        uint8_t firstChar = bytes[index];
        
        // 1个字节
        if ((firstChar & 0x80) == 0 && (firstChar == 0x09 || firstChar == 0x0A || firstChar == 0x0D || (0x20 <= firstChar && firstChar <= 0x7E))) {
            len = 1;
        }
        // 2字节
        else if ((firstChar & 0xE0) == 0xC0 && (0xC2 <= firstChar && firstChar <= 0xDF)) {
            if (index + 1 < dataLength) {
                uint8_t secondChar = bytes[index + 1];
                if (0x80 <= secondChar && secondChar <= 0xBF) {
                    len = 2;
                }
            }
        }
        // 3字节
        else if ((firstChar & 0xF0) == 0xE0) {
            if (index + 2 < dataLength) {
                uint8_t secondChar = bytes[index + 1];
                uint8_t thirdChar = bytes[index + 2];
                
                if (firstChar == 0xE0 && (0xA0 <= secondChar && secondChar <= 0xBF) && (0x80 <= thirdChar && thirdChar <= 0xBF)) {
                    len = 3;
                } else if (((0xE1 <= firstChar && firstChar <= 0xEC) || firstChar == 0xEE || firstChar == 0xEF) && (0x80 <= secondChar && secondChar <= 0xBF) && (0x80 <= thirdChar && thirdChar <= 0xBF)) {
                    len = 3;
                } else if (firstChar == 0xED && (0x80 <= secondChar && secondChar <= 0x9F) && (0x80 <= thirdChar && thirdChar <= 0xBF)) {
                    len = 3;
                }
            }
        }
        // 4字节
        else if ((firstChar & 0xF8) == 0xF0) {
            if (index + 3 < dataLength) {
                uint8_t secondChar = bytes[index + 1];
                uint8_t thirdChar = bytes[index + 2];
                uint8_t fourthChar = bytes[index + 3];
                if (firstChar == 0xF0) {
                    if ((0x90 <= secondChar & secondChar <= 0xBF) && (0x80 <= thirdChar && thirdChar <= 0xBF) && (0x80 <= fourthChar && fourthChar <= 0xBF)) {
                        len = 4;
                    }
                } else if ((0xF1 <= firstChar && firstChar <= 0xF3)) {
                    if ((0x80 <= secondChar && secondChar <= 0xBF) && (0x80 <= thirdChar && thirdChar <= 0xBF) && (0x80 <= fourthChar && fourthChar <= 0xBF)) {
                        len = 4;
                    }
                } else if (firstChar == 0xF3) {
                    if ((0x80 <= secondChar && secondChar <= 0x8F) && (0x80 <= thirdChar && thirdChar <= 0xBF) && (0x80 <= fourthChar && fourthChar <= 0xBF)) {
                        len = 4;
                    }
                }
            }
        }
        // 5个字节
        else if ((firstChar & 0xFC) == 0xF8) {
            len = 0;
        }
        // 6个字节
        else if ((firstChar & 0xFE) == 0xFC) {
            len = 0;
        }
        if (len == 0) {
            index++;
            [resData appendData:replacement];
        } else {
            [resData appendBytes:bytes + index length:len];
            index += len;
        }
    }
    return resData;
}

//汉字转string
-(NSString *)charStr:(NSString *)fromUtfStr{
    NSString *str=[fromUtfStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    return str;
}

//字典类型数组正序排序
-(NSArray *)sortingArry:(NSArray *)getBeforeArry andConStr:(NSString *)condStr{
    NSMutableArray * sortArr = [NSMutableArray arrayWithArray:getBeforeArry];
    NSSortDescriptor *des = [NSSortDescriptor sortDescriptorWithKey:condStr ascending:YES selector:@selector(localizedStandardCompare:)];
    [sortArr sortUsingDescriptors:@[des]];
    
    return [NSArray arrayWithArray:sortArr];
}

//字典类型数组按照某一字符串排序(这个方法会挨个比较数字,比如1,111,1111,2,22,222这样来排序)
-(NSArray *)sorteArry:(NSMutableArray *)mutaArry andStr:(NSString *)dicStr{
    NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:dicStr ascending:YES]];
    NSArray *sortedArr = [mutaArry sortedArrayUsingDescriptors:sortDesc];
    return sortedArr;
}

//获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)
-(NSString *)firstCharactor:(NSString *)str{
    //转成了可变字符串
    NSMutableString *pStr = [NSMutableString stringWithString:str];
    //先转换为带声调的拼音
    CFStringTransform((CFMutableStringRef)pStr,NULL, kCFStringTransformMandarinLatin,NO);
    //再转换为不带声调的拼音
    CFStringTransform((CFMutableStringRef)pStr,NULL, kCFStringTransformStripDiacritics,NO);
    //转化为大写拼音
    NSString *pPinYin = [pStr capitalizedString];
    //获取并返回首字母
    return [pPinYin substringToIndex:1];
}

//计算几天后的时间
-(NSString *)getNDay:(NSInteger)n andformat:(NSString *)format{
    NSDate*nowDate = [NSDate date];
    NSDate* theDate;
    if(n!=0){
        NSTimeInterval  oneDay = 24*60*60*1;  //1天的长度
        theDate = [nowDate initWithTimeIntervalSinceNow: oneDay*n ];//initWithTimeIntervalSinceNow是从现在往前后推的秒数
    }else{
        theDate = nowDate;
    }
    NSDateFormatter *date_formatter = [[NSDateFormatter alloc] init];
    [date_formatter setDateFormat:format];
    NSString *the_date_str = [date_formatter stringFromDate:theDate];
    return the_date_str;
}

//比较日期
-(NSInteger )compareDate:(NSString *)date1 withDate:(NSString *)date2 andformat:(NSString *)format{
    NSInteger result;
    NSDateFormatter *formatter=[NSDateFormatter new];
    [formatter setDateFormat:format];
    NSDate *dt1=[NSDate new];
    NSDate *dt2=[NSDate new];
    dt1=[formatter dateFromString:date1];
    dt2=[formatter dateFromString:date2];
    NSComparisonResult com=[dt1 compare:dt2];
        switch (com) {
        case NSOrderedAscending:
            result=1;
            break;
        case NSOrderedDescending:
            result=-1;
            break;
        case NSOrderedSame:
            result=0;
            break;
        default:
            break;
    }
    return result;
}

//判断今天星期几
-(NSString *)whichWeekDay{
    NSDate *currentDate = [NSDate date];//获取当前时间,日期
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEEE"];
    NSString *dateString = [dateFormatter stringFromDate:currentDate];
    return dateString;
}

//将时间戳转换成格式时间
- (NSString *)getTimeFromTimestamp:(NSTimeInterval )timerval andDataTpe:(NSString *)dataType{
    NSDate * myDate=[NSDate dateWithTimeIntervalSince1970:time];
    //设置时间格式
    NSDateFormatter * formatter=[[NSDateFormatter alloc]init];
    [formatter setDateFormat:dataType];  //例如@"YYYY-MM-dd HH:mm:ss"
    //将时间转换为字符串
    NSString *timeStr=[formatter stringFromDate:myDate];
    return timeStr;
}

UI相关

//字符串名称转颜色,适用于自带的类型,如redColor
-(UIColor *)colorFromStr:(NSString *)colorStr{
    SEL backColorSel = NSSelectorFromString(colorStr);
    UIColor* backColor= nil;
    if ([UIColor respondsToSelector: backColorSel])
        backColor  = [UIColor performSelector:backColorSel];
    return backColor;
}

//16进制转颜色
- (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];
    }
    // 判断前缀
    if ([cString hasPrefix:@"0X"])
        cString = [cString substringFromIndex:2];
    if ([cString hasPrefix:@"#"])
        cString = [cString substringFromIndex:1];
    if ([cString length] != 6)
        return [UIColor clearColor];
    // 从六位数值中找到RGB对应的位数并转换
    NSRange range;
    range.location = 0;
    range.length = 2;
    //R、G、B
    NSString *rString = [cString substringWithRange:range];
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];
    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];
}

//图片去色
-(UIImage *)changeGrayImage:(UIImage *)oldImage
{
    int bitmapInfo = kCGImageAlphaNone;
    int width = oldImage.size.width;
    int height = oldImage.size.height;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    CGContextRef context = CGBitmapContextCreate (nil,
                                                  width,
                                                  height,
                                                  8,
                                                  0,
                                                  colorSpace,
                                                  bitmapInfo);
    CGColorSpaceRelease(colorSpace);
    if (context == NULL) {
        return nil;
    }
    CGContextDrawImage(context,
                       CGRectMake(0, 0, width, height), oldImage.CGImage);
    UIImage *grayImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)];
    CGContextRelease(context);
    return grayImage;
}

//图片从中间拉伸以充满容器,适用于气泡类型
-(UIImage *)chableImage:(NSString *)fromImageStr{
    // 加载图片
    UIImage *image = [UIImage imageNamed:fromImageStr];
    // 设置左边端盖宽度
    NSInteger leftCapWidth = image.size.width * 0.5;
    // 设置上边端盖高度
    NSInteger topCapHeight = image.size.height * 0.5;
    UIImage *newImage = [image stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];
    return newImage;
}

//根据URL拿到图片
-(UIImage *)geturlImage:(NSString *)urlimgStr{
    NSURL *imgurl= [NSURL  URLWithString:urlimgStr];
    NSData *data = [NSData dataWithContentsOfURL:imgurl];
    UIImage *image = [UIImage imageWithData:data]; // 取得图片
    return image;
}

//贝塞尔曲线切圆
-(CAShapeLayer *)cutCircleSubLayer:(CGRect )rect andRadius:(CGFloat )radius{
    UIBezierPath *roundPath = [UIBezierPath bezierPathWithRoundedRect:rect  cornerRadius:radius];
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.frame = rect;
    shapeLayer.path = roundPath.CGPath;
    return shapeLayer;
}
//任意角切圆角
-(CAShapeLayer *)cutFixCirclelayer:(CGRect )frame andCutPath:(UIRectCorner )cutPath andCutnum:(CGSize )cutSize{
    UIBezierPath *roundPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:cutPath cornerRadii:cutSize];
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.frame = frame;
    shapeLayer.path = roundPath.CGPath;
    return shapeLayer;
}

//截取view范围的图片
-(UIImage *)cutThisViewImg:(UIView *)cutView{
  UIGraphicsBeginImageContextWithOptions(cutView.bounds.size, cutView.opaque, 0.0);
    [cutView.layer renderInContext:UIGraphicsGetCurrentContext()];//renderInContext呈现接受者及其子范围到指定的上下文
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();//返回一个基于当前图形上下文的图片
    UIGraphicsEndImageContext();//移除栈顶的基于当前位图的图形上下文    
    return viewImage;
}

//绘制虚线
- (void)drawDashLine:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor
{
      CAShapeLayer *shapeLayer = [CAShapeLayer layer];
      [shapeLayer setBounds:lineView.bounds];
      [shapeLayer setPosition:CGPointMake(CGRectGetWidth(lineView.frame) / 2, CGRectGetHeight(lineView.frame))];
      [shapeLayer setFillColor:[UIColor clearColor].CGColor];
      //  设置虚线颜色为blackColor
      [shapeLayer setStrokeColor:lineColor.CGColor];
      //  设置虚线宽度
      [shapeLayer setLineWidth:CGRectGetHeight(lineView.frame)];
      [shapeLayer setLineJoin:kCALineJoinRound];
      //  设置线宽,线间距
      [shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:lineLength], [NSNumber numberWithInt:lineSpacing], nil]];
      //  设置路径
      CGMutablePathRef path = CGPathCreateMutable();
      CGPathMoveToPoint(path, NULL, 0, 0);
      CGPathAddLineToPoint(path, NULL,CGRectGetWidth(lineView.frame), 0);
      [shapeLayer setPath:path];
      CGPathRelease(path);
      //  把绘制好的虚线添加上来
      [lineView.layer addSublayer:shapeLayer];
  }

相关文章

网友评论

      本文标题:常用基本方法

      本文链接:https://www.haomeiwen.com/subject/wkpfultx.html