web-dev-qa-db-ja.com

アニメーションのフェードインとフェードアウトSwift

アニメーション付きのUIImageViewがあり、UIViewでfadeInエフェクトを適用しますが、アニメーション化されたUIImageViewがタッチされたときにフェードアウトを適用する必要があります。

これは私がフェードインするものです。

UIView.animateWithDuration(0.5, delay: delay, 
    options: UIViewAnimationOptions.CurveEaseOut, animations: {
        uiImageView.alpha = 1.0
        }
17
PlugInBoy

これは私の研究に基づいて行うことです:(ストーリーボードを使用している場合)

  1. UIImageViewに移動し、[属性]で[ユーザーインタラクションを有効化]チェックボックスをオンにします。

  2. TapGestureRecognizerを画像ビューの上にドラッグします。

  3. タップジェスチャのクリックを制御し、ViewControler.Swiftでアクションを実行するためにドラッグします。

  4. 内部に次のコードを追加します。

    UIView.animate(withDuration: 0.5, delay: 0.5, options: .curveEaseOut, animations: {
        self.uiImageView.alpha = 0.0
    }, completion: nil) 
    

これで完了です!

45
AntiStrike12

IOS 10から開始Apple新しく起動 iOS Animations SDK これは、特にタイミング機能と対話性に関して、はるかに強力です。

このアプローチでコードをフェードアウトすると:

UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: {
    self.uiImageView.alpha = 0.0
}).startAnimation()

Property Animatorの詳細については、 iOS 10 Animations demo をご覧ください。

11
Olga Konoreva

Swift 4。UIViewオブジェクトにフェードインおよびフェードアウト機能を追加

extension UIView {

    func fadeIn(_ duration: TimeInterval = 0.5, delay: TimeInterval = 0.0, completion: @escaping ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
        UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
            self.alpha = 1.0
    }, completion: completion)  }

    func fadeOut(_ duration: TimeInterval = 0.5, delay: TimeInterval = 1.0, completion: @escaping (Bool) -> Void = {(finished: Bool) -> Void in}) {
        UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
            self.alpha = 0.3
    }, completion: completion)
   }
}

label.fadeIn()

label.fadeOut()

imageView.fadeOut(completion: {
    (finished: Bool) -> Void in
    imageView.removeFromSuperview()
})

label.fadeIn(completion: {
    (finished: Bool) -> Void in
    label.text = "Changed!"
})
10
August Lin

Swift 5

これは私にとってはうまくいきました。フェードイン/フェードアウトを継続してラベルをアニメーション化したかった。 「cardHeaderView」内にラベルを配置しました。

@IBOutlet weak var cardHeaderView: UIView!

これを「viewDidAppear」内に配置します。アニメーションをすぐに開始できるように、遅延を0にしました。

fadeViewInThenOut(view: cardHeaderView, delay: 0)

これが関数です。

func fadeViewInThenOut(view : UIView, delay: TimeInterval) {

    let animationDuration = 1.5

    UIView.animate(withDuration: animationDuration, delay: delay, options: [UIView.AnimationOptions.autoreverse, UIView.AnimationOptions.repeat], animations: {
        view.alpha = 0
    }, completion: nil)

}
1
Bill