剛接觸CoreText还蹲,目前項目想做一個文字全部居中赚瘦,并且逐漸變寬的效果
如圖:
代碼如下:
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
// 步驟1:得到當前用于繪制畫布的上下文净嘀,用于后續(xù)將內容繪制在畫布上
// 因為Core Text要配合Core Graphic 配合使用的狂魔,如Core Graphic一樣没宾,繪圖的時候需要獲得當前的上下文進行繪制
CGContextRef context = UIGraphicsGetCurrentContext();
// 步驟2:翻轉當前的坐標系(因為對于底層繪制引擎來說凌彬,屏幕左下角為(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)建需要繪制的文字與計算需要繪制的區(qū)域
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@"iOS程序在啟動時會創(chuàng)建一個主線程,而在一個線程只能執(zhí)行一件事情铲敛,如果在主線程執(zhí)行某些耗時操作褐澎,例如加載網絡圖片,下載資源文件等會阻塞主線程(導致界面卡死伐蒋,無法交互)工三,所以就需要使用多線程技術來避免這類情況。iOS中有三種多線程技術 NSThread先鱼,NSOperation俭正,GCD,這三種技術是隨著IOS發(fā)展引入的型型,抽象層次由低到高段审,使用也越來越簡單。"];
// 步驟5:根據AttributedString生成CTFramesetterRef
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, [attrString length]), path, NULL);
// 步驟6:進行繪制
CTFrameDraw(frame, context);
// 步驟7.內存管理
CFRelease(frame);
CFRelease(path);
CFRelease(frameSetter);
}
注:CGPathAddEllipseInRect是設置橢圓形狀
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, self.bounds);