<img src="https://img-blog.csdn.net/20160226093010248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />//
// ViewController.m
// AttributedStringTest
//
// Created by sun huayu on 13-2-18.
// Copyright (c) 2013年 sun huayu. All rights reserved.
//
#import "ViewController.h"
#import<CoreText/CoreText.h>
#import <QuartzCore/QuartzCore.h>
#import "AttributedLabel.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
AttributedLabel *label = [[AttributedLabel alloc] initWithFrame:CGRectMake(20, 20, 150, 40)];
// 注意!!一定要先给text赋值,然后再加属性;
label.text = @"this is test";
[self.view addSubview:label];
// 设置this为红色
[label setColor:[UIColor redColor] fromIndex:0 length:4];
// 设置is为黄色
[label setColor:[UIColor yellowColor] fromIndex:5 length:2];
// 设置this字体为加粗16号字
[label setFont:[UIFont boldSystemFontOfSize:30] fromIndex:0 length:4];
// 给this加上下划线
[label setStyle:kCTUnderlineStyleDouble fromIndex:0 length:4];
label.backgroundColor = [UIColor clearColor];
[label release];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//
// AttributedLabel.h
// AttributedStringTest
//
// Created by sun huayu on 13-2-19.
// Copyright (c) 2013年 sun huayu. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <CoreText/CoreText.h>
#import <QuartzCore/QuartzCore.h>
@interface AttributedLabel : UILabel{
NSMutableAttributedString *_attString;
}
// 设置某段字的颜色
- (void)setColor:(UIColor *)color fromIndex:(NSInteger)location length:(NSInteger)length;
// 设置某段字的字体
- (void)setFont:(UIFont *)font fromIndex:(NSInteger)location length:(NSInteger)length;
// 设置某段字的风格
- (void)setStyle:(CTUnderlineStyle)style fromIndex:(NSInteger)location length:(NSInteger)length;
@end
//
// AttributedLabel.m
// AttributedStringTest
//
// Created by sun huayu on 13-2-19.
// Copyright (c) 2013年 sun huayu. All rights reserved.
//
#import "AttributedLabel.h"
@interface AttributedLabel(){
}
@property (nonatomic,retain)NSMutableAttributedString *attString;
@end
@implementation AttributedLabel
@synthesize attString = _attString;
- (void)dealloc{
[_attString release];
[super dealloc];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect{
CATextLayer *textLayer = [CATextLayer layer];
textLayer.string = _attString;
textLayer.alignmentMode = kCAAlignmentCenter;//字体的对齐方式
textLayer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self.layer addSublayer:textLayer];
}
- (void)setText:(NSString *)text{
[super setText:text];
if (text == nil) {
self.attString = nil;
}else{
self.attString = [[[NSMutableAttributedString alloc] initWithString:text] autorelease];
}
}
// 设置某段字的颜色
- (void)setColor:(UIColor *)color fromIndex:(NSInteger)location length:(NSInteger)length{
if (location < 0||location>self.text.length-1||length+location>self.text.length) {
return;
}
[_attString addAttribute:(NSString *)kCTForegroundColorAttributeName
value:(id)color.CGColor
range:NSMakeRange(location, length)];
}
// 设置某段字的字体
- (void)setFont:(UIFont *)font fromIndex:(NSInteger)location length:(NSInteger)length{
if (location < 0||location>self.text.length-1||length+location>self.text.length) {
return;
}
[_attString addAttribute:(NSString *)kCTFontAttributeName
value:(id)CTFontCreateWithName((CFStringRef)font.fontName,
font.pointSize,
NULL)
range:NSMakeRange(location, length)];
}
// 设置某段字的风格
- (void)setStyle:(CTUnderlineStyle)style fromIndex:(NSInteger)location length:(NSInteger)length{
if (location < 0||location>self.text.length-1||length+location>self.text.length) {
return;
}
[_attString addAttribute:(NSString *)kCTUnderlineStyleAttributeName
value:(id)[NSNumber numberWithInt:style]
range:NSMakeRange(location, length)];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/