AttributedString

来源:互联网 发布:海晏数据库工程师招聘 编辑:程序博客网 时间:2024/06/13 05:53
      如何在一行显示不同颜色大小,不同属性的字符串呢?很多人都曾经遇到这个问题,刚巧前不久我也遇到了,在这里介绍一下解决方法。
      首先,我们一般用Label来显示字符串,但这里我们用UIView来显示,一种是重绘文字,但这个太麻烦,我介绍一个简单的吧。就是用NSMutableAttributedString,代码段如下:

 NSString*str1 = @"AAAAA";

       NSString *str2= @"AAAAA";

       NSString *str3= @"AAAAA";

       NSString *str4= @"AAAAA";

       NSString *longStr =[NSString stringWithFormat:@"%@%@%@%@",str1, str2, str3, str4];

       NSMutableAttributedString *attStr =[[NSMutableAttributedString alloc] initWithString: longStr];

        [attStraddAttribute:(NSString *)kCTFontAttributeNamevalue:(id)[UIFont systemFontOfSize:14]range:[longStr rangeOfString: longStr]];

       [attStr addAttribute:(NSString *)kCTFontAttributeName value:(id)[UIFontsystemFontOfSize:9] range:[longStr rangeOfString:str4]];

        [attStraddAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor blackColor].CGColorrange:[longStr rangeOfString: longStr]];

       [attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:[longStr rangeOfString:str1]];

       [attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor darkGrayColor].CGColorrange:[longStr rangeOfString:str2]];

       [attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor grayColor].CGColorrange:[longStr rangeOfString:str4]];


       UIView *show = [[UIViewalloc] initWithFrame:CGRectMake(10,10,200,200)];

       CATextLayer *tl =[CATextLayer layer];

       tl.contentsScale = [UIScreenmainScreen].scale;

       tl.wrapped = YES;

       tl.string = attStr;

       tl.frame = show.bounds;

       [show.layeraddSublayer:tl];


这样,这个show就相当于一个label了,能显示文字了,这比重写drawrect方法方便多了。做这个的时候还有一点,默认情况下,文字是发虚的,不如正常的label清楚,所以要加一行 tl.contentsScale = [UIScreen mainScreen].scale;这个才能让文字清晰。


0 0
原创粉丝点击