私が達成しようとしていること
バックグラウンドですべての描画をレンダリングしようとしている 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チームに感謝します。