私は、さまざまな「文字」のさまざまな色の部分をペイントする複雑なスクリプトを含む教育アプリに取り組んでいます。 UILabel
は問題外なので、Core Text にドリルダウンして、驚くほどうまくグリフを描画できていますCALayers
。
私ができなかったのは、カスタム描画テキストのサイズをアニメーション化することです。CALayers
基本的に、画面上を移動する「タイル」( )にテキストがあります。動き回るのは問題ありませんが、ユーザーが押したものを拡大したいと思います。
私の考えは、「フル解像度」のタイルをキャッシュしてから、画像境界のアニメーション中に拡大縮小して描画することです。これまでのところ、次の方法でそのようなタイルを描画してキャッシュし、再描画しようとしました:
UIGraphicsBeginImageContext(CGSizeMake(50, 50));
CGContextRef context = UIGraphicsGetCurrentContext();
//do some drawing...
myTextImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
次に で[CALayer drawInContext:(CGContextRef)context]
、 を呼び出します[myTextImage drawAtPoint:CGPointZero]
。
アプリを実行すると、コンソールに<Error>: CGContextDrawImage: invalid context 0x0
. context
その間、エラーがログに記録された後でも、同じ方法で テキストを描画し続けることができます。
2 つの質問があります: (1) なぜこれが機能しないのですか? CGBitmap
代わりに使用する必要がありますか?さらに重要なことは、(2) 全体的な問題を解決するためのよりスマートな方法はありますか? たぶん、テキストをパスとして保存しCAAnimation
、囲んでいる境界が変化するにつれて、どういうわけか異なるスケールでそれを描画するようになりCALayer
ますか?