我正在努力完成的事情
我有一个 UICollectionView,我试图在后台渲染所有绘图,然后在动画淡入完成后显示。
我已经在图像方面做得很好,但有些绘图只是文本。我需要适当地调整文本的大小,然后在背景中绘制它。
它可能有很多文本,并且在主线程上完成时会产生口吃。
我是如何做到的
我用CGBitmapContextCreate
的是图像,所以我也尝试用文本来做:
-(void)drawTextFromBundle
{
UIFont * font = [UIFont AvenirLTStdBlackObliqueWithSize:35]; //custom font
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, 250, backgroundHeight - 112, 8, 250 * 4, colorSpaceRef, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);
CGColorSpaceRelease(colorSpaceRef);
[_text drawInRect:CGRectMake(0, 0, 250, backgroundHeight - 112) withFont:font];
CGImageRef outputImage = CGBitmapContextCreateImage(context);
imageRef = outputImage;
[self performSelectorOnMainThread:@selector(finishDrawingImage) withObject:nil waitUntilDone:YES];
CGContextRelease(context);
CGImageRelease(outputImage);
});
}
细节
这显然不是正确的方法,因为我遇到了很多错误,都涉及 Core Graphics 文本函数,类似于<Error>: CGContextSetFont: invalid context 0x0
我知道有,UIGraphicsGetCurrentContext
但我不确定这是否是线程安全的,因为我听说不是。
需要注意的是,这个方法确实是从一个-drawRect:
方法中调用的。相同的确切上下文参数适用于我的图像。
我该怎么做才能将文本绘制到我想要的任何自定义中,所有这些都在后台安全地完成?如果您能告诉我如何在缩小文本以适合适当大小的同时执行此操作,则可以加分。
再次感谢 SO 团队。