ios 图文混排 (支持显示文字和表情)

#import "KitchenShowFaces.h"
 
#define BEGIN_FLAG @"{"
#define END_FLAG @"}"
@implementation KitchenShowFaces
 
-(void)getImageRange:(NSString*)message : (NSMutableArray*)array {
    NSRange range=[message rangeOfString: BEGIN_FLAG];
    NSRange range1=[message rangeOfString: END_FLAG];
    //判断当前字符串是否还有表情的标志。
    if (range.length && range1.length) {
        if (range.location>0) {
            [array addObject:[message substringToIndex:range.location]];
            [array addObject:[message substringWithRange:NSMakeRange(range.location, range1.location+1-range.location)]];
            NSString *str=[message substringFromIndex:range1.location+1];
            [self getImageRange:str :array];
        }else {
            NSString *nextstr=[message substringWithRange:NSMakeRange(range.location, range1.location+1-range.location)];
            //排除文字是“”的
            if (![nextstr isEqualToString:@""]) {
                [array addObject:nextstr];
                NSString *str=[message substringFromIndex:range1.location+1];
                [self getImageRange:str :array];
            }else {
                return;
            }
        }
 
    }else {
        if (message != nil) {
            [array addObject:message];
        }
 
    }
}
 
#define KFacialSizeWidth  24
#define KFacialSizeHeight 24
#define MAX_WIDTH 240
-(UIView *)assembleMessageAtIndex : (NSString *) message
{
    NSMutableArray *array = [[NSMutableArray alloc] init];
    [self getImageRange:message :array];
    UIView *returnView = [[UIView alloc] initWithFrame:CGRectZero];
    NSArray *data = array;
    UIFont *fon = [UIFont systemFontOfSize:14.0f];
    CGFloat upX = 0;
    CGFloat upY = 0;
    if (data) {
        for (int i=0;i<[data count];i++) {
            NSString *str=[data objectAtIndex:i];
            if ([str hasPrefix: BEGIN_FLAG]&&[str hasSuffix: END_FLAG])
                    {
                        if (upX > MAX_WIDTH)
                        {
                            upY = upY + KFacialSizeHeight;
                            upX = 0;
                        }
                NSString *imageName=[str substringWithRange:NSMakeRange(1, str.length - 2)];
                UIImageView *img=[[UIImageView alloc]initWithImage:[UIImage imageNamed:imageName]];
                        img.frame = CGRectMake(upX, upY, KFacialSizeWidth, KFacialSizeHeight);
                        [returnView addSubview:img];
                upX=KFacialSizeWidth+upX;
 
            } else {
                        for (int j = 0; j < [str length]; j++) {
                            NSString *temp = [str substringWithRange:NSMakeRange(j, 1)];
                            if (upX > MAX_WIDTH)
                            {
                                upY = upY + KFacialSizeHeight;
                                upX = 0;
                            }
                            CGSize size=[temp sizeWithFont:fon constrainedToSize:CGSizeMake(320, 40)];
                            UILabel *la = [[UILabel alloc] initWithFrame:CGRectMake(upX,upY,size.width,size.height)];
                            la.font = fon;
                            la.text = temp;
                            [returnView addSubview:la];
                            upX=upX+size.width;
                        }
            }
              }
    }
    returnView.frame = CGRectMake(0, 0, upX, upY); //@ 需要将该view的尺寸记下,方便以后使用
    return returnView;
}
 
@end


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值