两种方式 创建富文本的代码 ios +

#import <CoreText/CoreText.h>

#import <QuartzCore/QuartzCore.h>


NSAttributedString *getAttributedString(){

NSMutableAttributedString *attriString = [[[NSMutableAttributedString alloc] initWithString:@"this is test!"]

autorelease];

//this的字体颜色变为红色

[attriString addAttribute:(NSString *)kCTForegroundColorAttributeName

value:(id)[UIColor redColor].CGColor

range:NSMakeRange(0, 4)];

//is变为黄色

[attriString addAttribute:(NSString *)kCTForegroundColorAttributeName

value:(id)[UIColor yellowColor].CGColor

range:NSMakeRange(5, 2)];

//改变this的字体,value必须是一个CTFontRef

[attriString addAttribute:(NSString *)kCTFontAttributeName

value:(id)CTFontCreateWithName((CFStringRef)[UIFont boldSystemFontOfSize:14].fontName,

14,

NULL)

range:NSMakeRange(0, 4)];

//this加上下划线,value可以在指定的枚举中选择

[attriString addAttribute:(NSString *)kCTUnderlineStyleAttributeName

value:(id)[NSNumber numberWithInt:kCTUnderlineStyleDouble]

range:NSMakeRange(0, 4)];

return attriString;

}


@interface TView : UIView


@end


@implementation TView


- (id)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

self.backgroundColor = [UIColor clearColor];

}

return self;

}


-(void)drawRect:(CGRect)rect{

[super drawRect:rect];

NSAttributedString *attriString = getAttributedString();

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGContextConcatCTM(ctx, CGAffineTransformScale(CGAffineTransformMakeTranslation(0, rect.size.height), 1.f, -1.f));

// CGContextTranslateCTM(ctx, 0, rect.size.height);

// CGContextScaleCTM(ctx, 1, -1);

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attriString);

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddRect(path, NULL, rect);

CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);

CFRelease(path);

CFRelease(framesetter);

CTFrameDraw(frame, ctx);

CFRelease(frame);

}


@end


@interface BIDViewController ()


@end


@implementation BIDViewController


- (void)viewDidLoad

{

[super viewDidLoad];


TView *view = [[TView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];

[self.view addSubview:view];

[view release];

CATextLayer *textLayer = [CATextLayer layer];

textLayer.string = getAttributedString();

textLayer.frame = CGRectMake(0, CGRectGetMaxY(view.frame), 200, 200);

[self.view.layer addSublayer:textLayer];

}


- (void)viewDidUnload

{

[super viewDidUnload];

// Release any retained subviews of the main view.

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}


@end



转自 Created by zhangao on 5/30/12.

你可能感兴趣的:(ios)