0

私は、さまざまな「文字」のさまざまな色の部分をペイントする複雑なスクリプトを含む教育アプリに取り組んでいます。 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ますか?

4

1 に答える 1

0

さて、これは私が思っていたよりもはるかに簡単です。UIView内のCALayerのdrawInContext:にテキストを描画するだけです。次に、transformプロパティを使用してビューをアニメーション化すると、テキストが必要に応じて縮小または拡大されます。

テキストがブロックされないように、スケーリングに注意してください。これを行う最も簡単な方法は、変換スケール係数が1を超えないようにすることです。つまり、UIViewの「デフォルト」の1:1サイズを、これまでに表示したい最大サイズにします。

于 2012-09-29T00:54:22.790 に答える