zoukankan      html  css  js  c++  java
  • ios计算字符串宽高,指定字符串变色,获取URL参数集合

    #import <Foundation/Foundation.h>
    
    @interface NSString (Extension)
    
    - (CGFloat)heightWithLimitWidth:(CGFloat)width
                           fontSize:(CGFloat)fontSize
                    otherAttributes:(NSDictionary *)otherAttributes;
    
    - (CGFloat)widthWithLimitHeight:(CGFloat)height
                           fontSize:(CGFloat)fontSize
                    otherAttributes:(NSDictionary *)otherAttributes;
    
    - (CGSize)sizeWithLimitSize:(CGSize)size
                       fontSize:(CGFloat)fontSize
                otherAttributes:(NSDictionary *)otherAttributes;
    
    - (CGRect)rectWithSize:(CGSize)size
                  fontSize:(CGFloat)fontSize
           otherAttributes:(NSDictionary *)otherAttributes;
    
    
    //属性字符串 指定子串变色
    - (NSMutableAttributedString *)attributedStringWithcolor:(UIColor *)color subString:(NSString *)subString;
    
    // 属性字符串 指定子串变色 多处
    - (NSMutableAttributedString *)attributedStringWithColorArray:(NSArray *)colorArray subStringArray:(NSArray *)subStringArray;
    
    //属性字符串 指定子串改变显示效果
    - (NSMutableAttributedString *)attributedStringWithAttributeds:(NSDictionary *)attributeds subString:(NSString *)subString;
    /**
     转变指定字符串
     
     @param regArray 正则表达式数组
     @param attributeds 指定属性
     @return 返回的可变字符串
     */
    - (NSMutableAttributedString *)changeStringWithReg:(NSArray *)regArray  attributeds:(NSDictionary *)attributeds;
    
    // 将url中的参数转为字典
    - (NSMutableDictionary *)getURLParameters;
    
    
    /**
     插入图片
    
     @param images 图片数组
     @param font   字体
     @param span   间距
     @return 结果
     */
    -(NSMutableAttributedString *)attributedStringWithImages:(NSArray<UIImage *> *)images font:(UIFont *)font imageSpan:(CGFloat)span;
    
    
    @end
    

      

    #import "NSString+Extension.h"
    
    @implementation NSString (Extension)
    
    - (CGFloat)heightWithLimitWidth:(CGFloat)width
                           fontSize:(CGFloat)fontSize
                    otherAttributes:(NSDictionary *)otherAttributes {
        
        return [self rectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                         fontSize:fontSize
                  otherAttributes:otherAttributes].size.height;
    }
    
    
    - (CGFloat)widthWithLimitHeight:(CGFloat)height
                           fontSize:(CGFloat)fontSize
                    otherAttributes:(NSDictionary *)otherAttributes {
        
        return [self rectWithSize:CGSizeMake(CGFLOAT_MAX, height)
                         fontSize:fontSize
                  otherAttributes:otherAttributes].size.width;
    }
    
    - (CGSize)sizeWithLimitSize:(CGSize)size
                        fontSize:(CGFloat)fontSize
                 otherAttributes:(NSDictionary *)otherAttributes {
        
        return [self rectWithSize:size
                         fontSize:fontSize
                  otherAttributes:otherAttributes].size;
    }
    
    
    - (CGRect)rectWithSize:(CGSize)size
                  fontSize:(CGFloat)fontSize
           otherAttributes:(NSDictionary *)otherAttributes {
        
        NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}];
        if (otherAttributes) {
            for (NSString *aKey in otherAttributes.allKeys) {
                id aValue = [otherAttributes objectForKey:aKey];
                [dictionary setObject:aValue forKey:aKey];
            }
        }
        
        return [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:dictionary context:nil];
    }
    
    
    - (NSMutableAttributedString *)attributedStringWithcolor:(UIColor *)color subString:(NSString *)subString
    {
        NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
        if (![subString isKindOfClass:[NSString class]] || !subString.length) {
            return attributedString;
        }
    
        NSRange range = [self rangeOfString:subString];
        if (range.location != NSNotFound) {
            [attributedString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(range.location, range.length)];
        }
        return attributedString;
    }
    
    - (NSMutableAttributedString *)attributedStringWithColorArray:(NSArray *)colorArray subStringArray:(NSArray *)subStringArray
    {
        NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
        NSInteger count = subStringArray.count;
        if (count<2) {
            return [self attributedStringWithcolor:colorArray[0] subString:subStringArray[0]];
        }
        
        for (NSInteger i=0; i<count; i++) {
            NSString *subString= subStringArray[i];
            if (![subString isKindOfClass:[NSString class]] || !subString.length) {
                return attributedString;
            }
            
            NSRange range = [self rangeOfString:subString];
            if (range.location != NSNotFound) {
                [attributedString addAttribute:NSForegroundColorAttributeName value:colorArray[i] range:NSMakeRange(range.location, range.length)];
            }
        }
        
        return attributedString;
    }
    
    
    - (NSMutableAttributedString *)attributedStringWithAttributeds:(NSDictionary *)attributeds subString:(NSString *)subString{
        
        NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
        if (![subString isKindOfClass:[NSString class]] || !subString.length) {
            return attributedString;
        }
    
        NSRange range = [self rangeOfString:subString];
        if (range.location != NSNotFound) {
            
    //        [attributedString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(range.location, range.length)];
            [attributedString addAttributes:attributeds range:NSMakeRange(range.location, range.length)];
        }
        return attributedString;
    }
    
    /**
     转变指定字符串
     
     @param regArray 正则表达式数组
     @param attributeds 指定属性
     @return 返回的可变字符串
     */
    - (NSMutableAttributedString *)changeStringWithReg:(NSArray *)regArray  attributeds:(NSDictionary *)attributeds{
        
        NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:self];
        for (int i=0; i<regArray.count; i++) {
            
            NSString *re = [regArray ty_ObjectWithIndex:i];
            NSRegularExpression *regExp = [[NSRegularExpression alloc]initWithPattern:re
                                                                              options:NSRegularExpressionDotMatchesLineSeparators
                                                                                error:nil];
            
            NSArray* match = [regExp matchesInString:self options:NSMatchingReportCompletion range:NSMakeRange(0, [self length])];
            
            if (match.count != 0)
            {
                for (NSTextCheckingResult *matc in match)
                {
                    NSRange range = [matc range];
                    
                    [attr addAttributes:attributeds range:range];
                }
            }
            
        }
        
        return attr;
    }
    /**
     插入图片
     
     @param images 图片数组
     @param font   字体
     @param span   间距
     @return 结果
     */
    -(NSMutableAttributedString *)attributedStringWithImages:(NSArray<UIImage *> *)images font:(UIFont *)font imageSpan:(CGFloat)span{
    
        NSMutableAttributedString *textAttrStr = [[NSMutableAttributedString alloc] init];
        
        for (UIImage *img in images) {
            
            NSTextAttachment *attach = [[NSTextAttachment alloc] init];
            attach.image = img;
            CGFloat imgH = font.pointSize;
            CGFloat imgW = (img.size.width / img.size.height) * imgH;
            attach.bounds = CGRectMake(0, -2 , imgW, imgH);
            
            NSAttributedString *imgStr = [NSAttributedString attributedStringWithAttachment:attach];
            [textAttrStr appendAttributedString:imgStr];
            //标签后添加空格
            [textAttrStr appendAttributedString:[[NSAttributedString alloc] initWithString:@" "]];
        }
        
        [textAttrStr appendAttributedString:[[NSAttributedString alloc]initWithString:self]];
        //设置间距
        if (span != 0) {
            [textAttrStr addAttribute:NSKernAttributeName value:@(span)
                                range:NSMakeRange(0, images.count * 2/*由于图片也会占用一个单位长度,所以带上空格数量,需要 *2 */)];
        }
        
        return textAttrStr;
    }
    
    - (NSMutableDictionary *)getURLParameters {
        
        // 查找参数
        NSRange range = [self rangeOfString:@"?"];
        if (range.location == NSNotFound) {
            return nil;
        }
        
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        
        // 截取参数
        NSString *parametersString = [self substringFromIndex:range.location + 1];
        
        // 判断参数是单个参数还是多个参数
        if ([parametersString containsString:@"&"]) {
            
            // 多个参数,分割参数
            NSArray *urlComponents = [parametersString componentsSeparatedByString:@"&"];
            
            for (NSString *keyValuePair in urlComponents) {
                // 生成Key/Value
                NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];
                NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];
                NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];
                
                // Key不能为nil
                if (key == nil || value == nil) {
                    continue;
                }
                
                id existValue = [params valueForKey:key];
                
                if (existValue != nil) {
                    
                    // 已存在的值,生成数组
                    if ([existValue isKindOfClass:[NSArray class]]) {
                        // 已存在的值生成数组
                        NSMutableArray *items = [NSMutableArray arrayWithArray:existValue];
                        [items addObject:value];
                        
                        [params setValue:items forKey:key];
                    } else {
                        
                        // 非数组
                        [params setValue:@[existValue, value] forKey:key];
                    }
                    
                } else {
                    
                    // 设置值
                    [params setValue:value forKey:key];
                }
            }
        } else {
            // 单个参数
            
            // 生成Key/Value
            NSArray *pairComponents = [parametersString componentsSeparatedByString:@"="];
            
            // 只有一个参数,没有值
            if (pairComponents.count == 1) {
                return nil;
            }
            
            // 分隔值
            NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];
            NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];
            
            // Key不能为nil
            if (key == nil || value == nil) {
                return nil;
            }
            
            // 设置值
            [params setValue:value forKey:key];
        }
        
        return params;
    }
    
    
    @end
    

      

  • 相关阅读:
    Gitcafe绑定自定义域名
    如何优雅地使用Sublime Text
    使用Hexo搭建专属Blog
    How to Use Android ADB Command Line Tool
    雷军北大15分钟演讲:我至少有胆量去想(转)
    浅谈android中的目录结构
    react里 MD5加密
    git忽略相应文件夹,不上传
    antd-mobile的按需加载
    当react 项目使用px2rem
  • 原文地址:https://www.cnblogs.com/likun123/p/9518664.html
Copyright © 2011-2022 走看看