我希望在大量的UITableViewCell上呈现文本。
文本以UITableViewCells drawRect:(CGRect)rect
方法呈现。
每个单元格包含不同数量的行,文本具有重量和颜色等属性。
在- (void) tableview:(UITableView*) tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath;
中,我将tableString传递给了tableString,这是我在构建模型时预先创建的。
我附上了一些代码,显示了drawRect中发生的事情的要点。
我一直在阅读(文档,博客等),CTFrameSetter是最昂贵的对象。这是有道理的,因为这是计算字形和运行的所有计算。 我现在的问题是,我可以预先制作它并将其传递给我的手机 在cellForRowAtIndexPath上它是否可能对速度产生积极影响?
- (void) drawRect:(CGRect)rect
{
/* These are pre-populated and the attributedString is passed to the cell at run time
NSDictionary *stringAttributeDict = [NSDictionary dictionaryWithObjectsAndKeys:
(id)fontRef, (NSString*)kCTFontAttributeName,
(id)[[UIColor blueColor] CGColor], (NSString*)(kCTForegroundColorAttributeName), nil]];
NSDictionary *firstPartAttributeDict = [NSDictionary dictionaryWithObjectsAndKeys:
(id)fontRef, (NSString*)kCTFontAttributeName,
(id)[[UIColor greenColor] CGColor], (NSString*)(kCTForegroundColorAttributeName), nil]];
[attributedString addAttributes:stringAttributeDict range:NSMakeRange(0, [attributedString.string length])];
[attributedString addAttributes:firstPartAttributeDict range:NSMakeRange(0, 5)];
*/
rect = CGRectInset(rect, 5.0, 5.0);
CGContextRef context = UIGraphicsGetCurrentContext();
// Flip the coordinate system
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
//Make a path to render the text in
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, rect);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedString);
CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attributedString length]), path, NULL);
CFRelease(framesetter);
CFRelease(path);
//Draw the text:
CTFrameDraw(theFrame, context);
CFRelease(theFrame);
}
答案 0 :(得分:0)
是的,您应该能够保留它并在单元格之间共享它。我在单个视图中保留了多个文本块的持久性CTFramesetterRef
,我无法理解为什么在tableview中将多个单元格用于任何不同的文本块。