4

ボタンには 2 つの画像があります。1 つは通常の状態、もう 1 つは選択された状態です。選択した状態から通常の状態に戻すとき、クロスフェード効果を数秒間かけて発生させたいと思います。

私がこれまで行っていることは、2 つの UIView アニメーションを使用することです。最初のアニメーションは、選択された状態で 1.0 のアルファから .5 のアルファになります。次に、通常の状態に切り替えて、アルファ 0.5 からアルファ 1.0 になる 2 番目の UIView アニメーションを実行します。

視覚効果 (選択した画像から通常の画像への突然の移行) には満足できません。また、UIView を使用すべきではないことも読みました。では、ここでの正しいアプローチは何ですか?コードサンプルも非常に役立ちます。

4

3 に答える 3

2

私にとってこれはうまくいきました:

[UIView transitionWithView: button duration: 4.0 options: UIViewAnimationOptionTransitionCrossDissolve animations: ^{
    [button setSelected: !button.isSelected];
} completion: nil];

しかし、これは、次の3つの呼び出しで同じを設定した場合にのみ機能しました(1の呼び出しを残すことはできませんでした):UIImageUIControlStateHighlightedUIControlStateSelected

[button setImage: img forState: UIControlStateSelected | UIControlStateHighlighted];
[button setImage: img forState: UIControlStateSelected];
[button setImage: img forState: UIControlStateHighlighted];
于 2015-10-14T14:53:00.600 に答える
1

以下は非常に単純で、選択された状態から選択されていない状態に 4 秒で遷移します。唯一の問題は、ボタンも同時に移動している場合、トランジションがうまく機能しないことです。

    button.selected = TRUE;
    CATransition *transition = [CATransition animation];
    transition.duration = 4.0;
    transition.type = kCATransitionFade;
    transition.delegate = self;
    [button.layer addAnimation:transition forKey:nil];
    button.selected = TRUE;
于 2011-03-12T06:17:15.540 に答える
1

ようやく必要なものが見つかりました。ボタンの選択状態と非選択状態に画像を割り当てる代わりに、ボタンを透明に保ち、代わりにそのボタンに 2 つのビューを追加します。最初はアルファが 1.0 と 0.0 です。

ボタンが選択され、セレクターで指定されたメソッドに入ると、次のようにアニメーションを使用してこれら 2 つのビュー間を遷移します。

    NSArray * subviewArray = [button subviews];
    [UIView animateWithDuration:2.0
                    animations:^ {
                        ((UIView *)[subviewArray objectAtIndex:0]).alpha = 0.0;
                        ((UIView *)[subviewArray objectAtIndex:1]).alpha = 1.0;
                    }
                    completion:nil];

このアプローチは、遷移中にボタンが移動している場合にも機能します。これが、将来同じ質問に直面する他の人に役立つことを願っています!

于 2011-03-14T05:04:03.870 に答える