2017-10-14 14 views
0

ボタンを操作する前にユーザーが選択する必要があるビューがあります。これをより明確にするために、(グレー表示)ボタンを最初に押した場合に、実行する必要のある選択を表す要素を点滅させたいと考えています。私。私はこれがその状態のエラーであることを示し、最初に使用する必要があるUI要素にユーザーの注意を引き付けます。すばやく2回点滅要素(以下のコードでself.displayを)持っているUI要素を点滅させることでエラーを表示する

私の現在の試みは、以下の通りです:

@IBAction func inactiveButtonClick() { 
    let period = 0.16 

    UIView.animate(withDuration: period/2, delay: 0.0, options: [.curveEaseInOut, .autoreverse, .repeat], animations: { 
     self.display.alpha = 0 
    }, completion: { _ -> Void in 
     self.display.alpha = 1 
    }) 

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + period*2, execute: { 
     self.display.layer.removeAllAnimations() 
    }) 

} 

これはよくかなりを動作しますが、100%の権利を感じていない、とアニメーションが終了する前に時々分断されることがあります。私は2つのアニメーションをキューに入れることができると思うが、これを達成するためのより簡単な方法があるのだろうかと思う。 UI要素を点滅させてエラーを表示するビルトイン方法はありますか?そうでない場合は、カーブと周波数の「既知の良い」組み合わせがユーザーに伝えられますか?

答えて

1

キーフレームアニメーションは、このシナリオでは、完璧なフィット感のように見える:

UIView.animateKeyframes(withDuration: period, delay: 0.0, options: [], animations: { 
    UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: { 
     self.display.alpha = 0 
    }); 
    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: { 
     self.display.alpha = 1 
    }); 
}, completion: nil); 

だから、最初の期間の長さとキーフレームアニメーションを作成します。アニメーションブロックの内側には、相対的な開始時間(キーフレームアニメーションの0と1 - 1の間で、あなたの継続時間)を指定することによって、カスタムのキーフレームアニメーションを追加できます。

最初に開始するアニメーションを追加します。その相対的な継続時間は0.5であり、合計アニメーションの持続時間の1/2です。 2番目のアニメーションは、最初にアニメーションの1/2で終了し、残りのアニメーション時間の間続きます。

希望すると便利です。

関連する問題