剛接觸CoreText,目前項(xiàng)目想做一個(gè)文字全部居中,并且逐漸變寬的效果
如圖:
代碼如下:
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
// 步驟1:得到當(dāng)前用于繪制畫布的上下文,用于后續(xù)將內(nèi)容繪制在畫布上
// 因?yàn)镃ore Text要配合Core Graphic 配合使用的,如Core Graphic一樣,繪圖的時(shí)候需要獲得當(dāng)前的上下文進(jìn)行繪制
CGContextRef context = UIGraphicsGetCurrentContext();
// 步驟2:翻轉(zhuǎn)當(dāng)前的坐標(biāo)系(因?yàn)閷?duì)于底層繪制引擎來說,屏幕左下角為(0,0))
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// 步驟3:創(chuàng)建繪制區(qū)域
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, self.bounds);
// 步驟4:創(chuàng)建需要繪制的文字與計(jì)算需要繪制的區(qū)域
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@"iOS程序在啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)主線程,而在一個(gè)線程只能執(zhí)行一件事情,如果在主線程執(zhí)行某些耗時(shí)操作,例如加載網(wǎng)絡(luò)圖片,下載資源文件等會(huì)阻塞主線程(導(dǎo)致界面卡死,無法交互),所以就需要使用多線程技術(shù)來避免這類情況。iOS中有三種多線程技術(shù) NSThread,NSOperation,GCD,這三種技術(shù)是隨著IOS發(fā)展引入的,抽象層次由低到高,使用也越來越簡單。"];
// 步驟5:根據(jù)AttributedString生成CTFramesetterRef
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, [attrString length]), path, NULL);
// 步驟6:進(jìn)行繪制
CTFrameDraw(frame, context);
// 步驟7.內(nèi)存管理
CFRelease(frame);
CFRelease(path);
CFRelease(frameSetter);
}
注:CGPathAddEllipseInRect是設(shè)置橢圓形狀
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, self.bounds);