アニメーション付きのUIImageViewがあり、UIViewでfadeInエフェクトを適用しますが、アニメーション化されたUIImageViewがタッチされたときにフェードアウトを適用する必要があります。
これは私がフェードインするものです。
UIView.animateWithDuration(0.5, delay: delay,
options: UIViewAnimationOptions.CurveEaseOut, animations: {
uiImageView.alpha = 1.0
}
これは私の研究に基づいて行うことです:(ストーリーボードを使用している場合)
UIImageViewに移動し、[属性]で[ユーザーインタラクションを有効化]チェックボックスをオンにします。
TapGestureRecognizerを画像ビューの上にドラッグします。
タップジェスチャのクリックを制御し、ViewControler.Swiftでアクションを実行するためにドラッグします。
内部に次のコードを追加します。
UIView.animate(withDuration: 0.5, delay: 0.5, options: .curveEaseOut, animations: {
self.uiImageView.alpha = 0.0
}, completion: nil)
これで完了です!
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 をご覧ください。
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!"
})
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)
}