美文网首页iOS快速开发总结
iOS中表情等含图片的字符串

iOS中表情等含图片的字符串

作者: 键盘上的演绎者 | 来源:发表于2018-01-18 09:03 被阅读118次
    #pragma mark 获取含自定义的图片的字符串
    -(NSMutableAttributedString *)ImgWithString:(NSString *)string
    {
        if (!string) {
            return [NSMutableAttributedString new];
        }
        NSMutableAttributedString *result = [[NSMutableAttributedString alloc] initWithString:string];
        
        //所有表情数组
        NSArray *expressionList = [[NSArray new] EmoticonArray];
        
        int i = 0;
        
        while (i < expressionList.count) {
            NSString *item = expressionList[i];
            NSRange range = [result.string rangeOfString:item];
            if(range.location == NSNotFound){
                i++;
                continue;
            }
            ImageTextAttachment *textAttachment = [[ImageTextAttachment alloc] init];
            
            //表情文本替换成图片
            UIImage * image = [UIImage imageNamed:[self stringToImageName:item]];
            
            CGSize size = [image size];
            textAttachment.bounds = CGRectMake(0, 0, size.width*16/size.height, 16);
            textAttachment.image = image;
            textAttachment.imageTag = item;
    
            NSAttributedString *attchString = [NSAttributedString attributedStringWithAttachment:textAttachment];
            [result replaceCharactersInRange:range withAttributedString:attchString];
        }
        return result;
    }
    
    #pragma mark 根据表情名称--得到图片名称
    -(NSString *)stringToImageName:(NSString *)string
    {
        NSString *result = string;
        result = [result stringByReplacingOccurrencesOfString:@"/" withString:@""];
        result = [result stringByReplacingOccurrencesOfString:@"[" withString:@""];
        result = [result stringByReplacingOccurrencesOfString:@"]" withString:@""];
        return result;
    }
    
    #pragma mark 图片转化成纯文本
    -(NSString *)getPlainString {
        
        NSMutableString *plainString = [NSMutableString stringWithString:self.string];
        
        __block NSUInteger base = 0;
        
        [self enumerateAttribute:NSAttachmentAttributeName inRange:NSMakeRange(0, self.length)
                         options:0
                      usingBlock:^(id value, NSRange range, BOOL *stop) {
                          //检查类型是否是自定义NSTextAttachment类
                          if (value && [value isKindOfClass:[ImageTextAttachment class]]) {
                              //替换
                              [plainString replaceCharactersInRange:NSMakeRange(range.location + base, range.length) withString:((ImageTextAttachment *) value).imageTag];
                              //增加偏移量
                              base += ((ImageTextAttachment *) value).imageTag.length - 1;
                          }
                      }];
        
        return plainString;
    }
    

    相关文章

      网友评论

        本文标题:iOS中表情等含图片的字符串

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