1

私が作りたいのは、アニメーションが成長するバーであり、テキスト(数字)もバーの長さの値とともに成長します。次のようになります。

ここに画像の説明を入力

バーは水平方向に伸び、数字付きのテキストも伸びます。また、ユーザーは「リプレイ」をタップしてアニメーションをもう一度再生したい場合があります。

Apple プログラミング ガイドといくつかの優れたチュートリアルを読んだ後、一般的な考えが浮かびました。Quartz2d を使用すると、バーと垂直線、およびテキストも描画できました。ただし、Quartz2d にはアニメーション効果がありません。Core Animation を使用すると、時間と指定したプロパティ値によってバーの形状を変更できました。私はこれで正しいですか?

だから私が望むのは、Quartz2dとCore Animationを組み合わせて、最初にQuartz2dでバーを描画してから、CAを使用してアニメーション化することだと思いますか? これを行う正しい方法ですか?または、他の軽量ソリューションが利用可能であれば、私は大いに感謝します。

PS: 私が知る限り、私は iPhone の描画に非常に慣れていません。アニメーションを行う最も軽い方法は UIView アニメーションによるものであり、より軽い方法は CALayer アニメーションによるものです。また、描画作業はすべて Quartz2d で行っています。この投稿を読んだ後でも、ちょっと混乱しています。しかし実際には、私はグラフィック システム全体についてあまり概念的ではありません (またはできません)。しかし、これについて実際のコードを書いた後、私は間違いなく掘り続けます。

ですから、今は、これがこのアニメーション効果を実現する最善の方法であるかどうかを知る必要があります.

みんなありがとう :)

4

1 に答える 1

2

以下に書いたようなものを使用します。1.5 秒かけてフレームを拡大します (もちろん、期間は変更できます)。シェイプに使用しているオブジェクトの種類がわかりません。a のようなものを使用して、必要に応じUIViewて を設定backgroundColorできます。

// calculate your new frame - not sure what your parameters are as you've not explained it in your question.
CGRect newFrame = CGRectMake(10, 10, 300, 40);  // arbitrary values to demonstrate process... 

[UIView animateWithDuration:1.5 animations:^{
    // grow your rect (assuming yourShape is a UIView)
    yourShape.frame = newFrame;
    yourLabel.center = CGPointMake(newFrame.size.width - yourLabel.frame.size.width, yourLabel.center.y)
} completion:^(BOOL finished) {
    // do anything here that needs to occur after..

}];

「テキストを大きくする」(文字を大きくする、またはフォント サイズを大きくする) というのが正確に何を意味するのかわからなかったので、水平バーの最後 (右) にテキストを保持する例を示しました)。UIViewこれは、アニメーションを試す良い出発点となるはずです。


ラベル更新のインクリメント

NSTimerを使用してラベルをインクリメントする必要があります。このコードを試してください。

あなたの.hで

int maxNum;
NSTimer *numTimer;

あなたの.mで

これを使用して、カウントを開始します。UIViewおそらくアニメーションの直前にこれを配置したいと思うでしょう。

maxNum = 100;  // make this whatever number you need..
// you can change the TimeInterval to whatever you want..
numTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(growNumbers:) userInfo:nil repeats:YES];

これは、タイマーが起動するたびに (0.03 秒ごとに) タイマーが呼び出すセレクターです。

- (void)growNumbers:(id)sender {
    int i = self.numberLabel.text.intValue;
    if (i >= maxNum) {
        [numTimer invalidate];
        maxNum = 0;
    } else {
        i++;
        self.numberLabel.text = [NSString stringWithFormat:@"%i",i];
    }
}
于 2013-05-27T02:51:43.443 に答える