0

ボタンのアルファ値をいじる簡単なアニメーションを実装しようとしています。しかし、動きが速すぎてアニメーションが見えません。

-(void)Flash: (id)sender {
    UIButton *senderButton = (UIButton *)sender;
    for (float i = 0.8; i > 0.2; i = i - 0.1) {
        senderButton.alpha = i;
    }
    senderButton.alpha = 0.9;
}

0.5秒ごとにプロセスを遅くするにはどうすればよいですか?

4

2 に答える 2

4

指定された期間にわたってビューの不透明度を下げるには、アニメーション ブロックに入れます。アルファを設定できます - 私の個人的な好みは、このような視覚処理のためにレイヤー プロパティを調整することです (主に、これは私のコード ベースの一貫性の問題です)。ここに示すいずれかのアプローチを使用できます (両方を使用しないでください)。このような状況では、違いはごくわずかです。レイヤー プロパティを変更する場合は、Quart ヘッダーをインポートする必要があります。

- (void)flash:(id)sender
{
    UIButton *button = (UIButton *)sender;

    NSTimeInterval duration = 1;
    [UIView animateWithDuration:duration
                     animations:^{

                         // My preferred approach is to set layer opacity...
                         [[button layer] setOpacity:0.1f];

                         // But you could just as easily set alpha (per your original question)
                         [button setAlpha:0.1f];


                     } completion:^(BOOL finished) {

                         // Returns the button to full opacity on completion.
                         [[button layer] setOpacity:1.0f];

                         // Or alternately, alpha
                         [button setAlpha:1.0f];
                     }];

}
于 2012-11-16T15:09:44.900 に答える
0
for (float i = 0.8; i > 0.2; i = i - 0.1) {
    senderButton.alpha = i;
}

ここには(少なくとも)2つの問題があります。

  1. あなたはalphaデバイスがそれをすることができるより約6倍速く変化しています、それは本当に速いです。誰もがそれが起こるのを見ることができる方法は絶対にありません。あなたは物事を遅くするために各変更の間に遅延を追加する必要があります。

  2. alphaビューを再描画せずに何度も変更しています。再描画は実行ループの一部として行われます。このようなループを使用するとfor、すべての変更が同期的に行われ、実行ループが変更のたびに再描画されることはありません。したがって、アニメーションを他の人が見ることができるところまで遅くするために遅延を追加したとしても、あなたがそれを描いていないので、他の人はそれを見ることができません。

Core Animationを使用すると、両方の問題を簡単に解決できます。isaacが彼の答えで提供する例は素晴らしいです。Core Animationがない場合は、タイマーを使用して遅延を提供する必要があります。タイマーは、起動するたびにコードを呼び出して変更を加えることができます。また、実行ループを正常に実行して、ビューを再描画できるようにします。Core Animationを使用すると、すべてがはるかに簡単になります。アニメーションの継続時間と、などのアニメーション化可能なプロパティの最終値を設定するとalpha、Core Animationは、アニメーションの最後に最終値に達するまで、時間の経過とともにプロパティの値をゆっくりと調整します。 。

于 2012-11-25T16:12:38.217 に答える