8

テキストのチャンクを表示するアプリケーションで、デバイスを横向きにするとフォント サイズが大きくなります。アニメーション全体を実行してから突然新しいサイズにジャンプする方法が気に入らないので、回転の過程でサイズの変化をアニメーション化したいと思います。

UIViewフォント プロパティがアニメーション化できないため、この変更をアニメーション ブロックにスローしても機能しないことをどこかで読みましたが、これを行うためのオプションは何ですか?

私の特定の実装では、UILabel/UITextViewをそのままスケーリングするだけではありません。ボックスの境界は font-size よりも (比例して) 大きくなっているため、テキストにリフローが発生します。それは私には問題ありません。

編集:単にスケーリングするだけで問題ありませんUITextView

また、手動で「アニメーション化」することを検討していました。ビューをレイアウトしてフォントサイズを調整する方法があります。ローテーションの開始時刻とアニメーションの継続時間がわかっていれば、アニメーションの途中で中間のフォント サイズを 1 つまたは 2 つレンダリングするようにタイミングを合わせることができます。それらを取得するための助けをいただければ幸いです。

4

4 に答える 4

6

1 つのオプションは、古いテキストをフェード アウトし、フォント サイズを変更して、フェード インすることです。フォント プロパティはアニメーション化できない場合がありますが、アルファはアニメーション化できます。alpha は UIView のプロパティであるため、UILabel、UITextView など、すべてのテキスト付きビューを同じように扱うことができます。これも見栄えがします。

于 2011-03-15T18:22:25.413 に答える
6

ローテーションの開始時刻とアニメーションの長さがわかっていれば...

面白いことに言及する必要があります。アニメーションが始まる直前に、View Controller はwillAnimateRotationToInterfaceOrientation:duration:必要な正確な情報を提供するメッセージを受け取ります。

于 2011-03-17T11:37:31.830 に答える
4

続行する方法は次のとおりです。

  1. CAKeyframeAnimation を作成する
  2. CATransform3D オブジェクトのセットを使用して、そのアニメーション中に達成したいスケーリングと回転を定義します
  3. これらの変換をキーフレーム アニメーションに追加します
  4. addAnimationメッセージをラベル レイヤー オブジェクトに送信します[[label layer] addAnimation]

yourLabel以下は、UILabelスケーリングと回転を行うと仮定したコード サンプルです。

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"];

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font

[scale setValues:[NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:CATransform3DIdentity],
[NSValue valueWithCATransform3D:rotationScaled],
nil]];

// set the duration
[scale setDuration: 1.0];

// animate your label layer
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"];

これは通常、たとえばテキストが跳ね回る様子をアニメーション化する方法です。

デバイスが回転を開始したときにこれを開始し、回転が完了したらアニメーションを取得して、適切なスケール/位置でラベルを更新できるようにすることができます。

適切なタイミングと回転を見つけるには、チューニングが必要です。

于 2011-03-16T15:31:48.197 に答える
1

didAnimateFirstHalfOfRotationToInterfaceOrientation:が呼び出されたときにフォント サイズを変更します。そうすれば、ローテーションが完了すると、ユーザーは変更を認識しません。回転が行われているため、フォント サイズの変更を確認するのは非常に困難です。

于 2010-07-31T06:23:37.363 に答える