1. ホーム
  2. ios

[解決済み] UIViewのアニメーションによる隠蔽・表示

2022-04-21 01:11:32

質問

私の簡単な目標は、隠したり見せたりする機能をフェードアニメーション化することです。

Button.hidden = YES;

シンプルでいいじゃないですか。しかし、ただ消えるのではなく、フェードアウトさせることはできないのでしょうか?その方がプロらしくない。

解決方法は?

iOS 4以降では、QuartzCoreをインポートしなくても、UIViewの遷移メソッドだけで行う方法があります。と言うだけで良いのです。

目的C

[UIView transitionWithView:button
                  duration:0.4
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                     button.hidden = YES;
                }
                completion:NULL];

スウィフト

UIView.transition(with: button, duration: 0.4, 
                  options: .transitionCrossDissolve, 
                  animations: {
                 button.hidden = false
              })

以前の解決策

Michailのソリューションは動作しますが、実はベストなアプローチではありません。

アルファフェードの問題は、時々、異なるオーバーラップするビューレイヤーがフェードアウトするときに奇妙に見えることです。Core Animationを使った他の選択肢もあります。まず、アプリにQuartzCoreフレームワークを組み込みます。 #import <QuartzCore/QuartzCore.h> をヘッダーに追加してください。これで、以下のいずれかができるようになります。

1) 設定する button.layer.shouldRasterize = YES; そして、Michail が彼の回答で提供したアルファアニメーションのコードを使用してください。これはレイヤーが奇妙にブレンドされるのを防ぎますが、若干のパフォーマンス上のペナルティがあり、ボタンがピクセル境界に正確に配置されていない場合、ぼやけて見えることがあります。

または

2) 次のコードを使って、代わりにフェードをアニメーション化します。

CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];

button.hidden = YES;

この方法の良いところは、ボタンのプロパティがアニメーション可能でなくても(例えば、ボタンのテキストや画像)、クロスフェードできることです。トランジションを設定し、その直後にプロパティを設定するだけです。