10

私は、UILabel でフレーム サイズの変更をスムーズにアニメーション化する適切な方法を見つけようとしています。デフォルトでは、次のようなことをすると次のようになります。

// Assume myLabel frame starts as (0, 0, 100, 200) 
[UIView beginAnimations:@"myAnim" context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:1.0];
myLabel.frame = CGRectMake(0.0, 0.0, 50, 100);
[UIView commitAnimations];  

ラベルを使用してスムーズなアニメーションを取得しますが、その方法は、再描画された画像レイヤーをラベルの目的のサイズに合わせて取得し、現在のサイズに合わせてコンテンツをストレッチしてから、目的の四角形にアニメーション化することです。これにより、テキスト表示で非常に奇妙なジャンプが発生します。アニメーション前の外観と、アニメーション開始直後の 2 つの画像を次に示します。

プレアニメーション

ポストアニメーション

これをアニメーション化するためにレイヤーだけを使用しようとしましたが、それでも同じ問題が発生します。

問題は、どうすればこれを回避できるかということです。

助けてくれてありがとう、
スコット

4

5 に答える 5

38

2 年間の死んだ質問に答えてくれて万歳ですが、私は答えを見つけました。Interface Builder またはコードcontentModeで、ラベルのプロパティを変更します。あなたはオンになっているようscaleToFillです。leftまたはを試してくださいright

于 2011-07-06T20:42:50.817 に答える
7

@cliclcly の回答を拡張するには: UILabel のドキュメントの概要から:

UILabel クラスのデフォルトのコンテンツ モードは UIViewContentModeRedraw です。このモードでは、外接する四角形が変更されるたびにビューの内容が再描画されます。クラスの継承された contentMode プロパティを変更することで、このモードを変更できます。

UIView の contentMode プロパティのドキュメントから:

このプロパティのデフォルト値は UIViewContentModeScaleToFill です。

contentMode プロパティがデフォルトで異なるため、UILabels はデフォルトで他の UIView とは異なる動作をします。

于 2012-10-02T00:53:19.017 に答える
6

UIlabel フレーム アニメーションが奇妙であることがわかりました。それらのサイズはすぐに最終サイズに設定され、テキストはそのサイズでレンダリングされます。その後、位置の変更のみがアニメーション化されます。つまり、宛先のサイズが (0,0) の場合、ラベルはすぐに消えます。この制限を回避するために、サブビューをクリップする同じサイズのビュー内にラベルを配置し、ラベルの自動サイズ変更を無効にし、ラベル自体ではなくラベルのスーパービューをアニメーション化しています。最終的な結果として、ラベル フレーム全体が完全にアニメーション化されますが、含まれるテキストは、たとえば別のフォント サイズで再レンダリングされることも、テキストの切り捨てが変更されることもありません。まだ完璧ではありませんが、私の目的には合っています。

初期フレーム:

初期フレーム

アニメーション中:

アニメーション中

アニメーション終了:

アニメ終了

于 2014-03-06T12:32:08.467 に答える
0

フレームをアニメーション化しても、フォント サイズを変更してもアニメーション化されません。あなたが見ている行動を理解していれば、ラベルadjustsFontSizeToFitWidthが「True」に設定されていると思います。そのため、フレームがサイズに合わせてアニメーション化し、その後フォントサイズが即座に再調整されます。

フレームとフォントが同時にスケーリングされるように、ラベルの変換をスケーリングしようとする場合があります。

于 2009-11-13T15:58:52.673 に答える
-3

ラベルの自動レイアウトをオフにするだけです。

Xcode でラベルをクリックし、プロパティ ペインで自動レイアウト オプションのチェックを外します。

于 2013-12-23T18:39:22.677 に答える