在 Swift 中重复 alpha 动画

Posted

技术标签:

【中文标题】在 Swift 中重复 alpha 动画【英文标题】:Repeating alpha animation in Swift 【发布时间】:2021-04-06 21:27:59 【问题描述】:

我正在尝试使用 Swift 在 ios 上的 UITableViewCell 中为视图实现类似脉冲的效果。要求是从 alpha 1.0 到 0.5 再回到 1.0 的 2 秒动画。并无限重复。

我尝试了几种方法,但动画永远不会开始或重复。

view 是一个简单的 UIView 出口:

@IBOutlet private weak var view: UIView!

尝试过的变体:

UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [], animations: 
    UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.5, animations: 
        view.alpha = 0.0
    )
    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: 
        view.alpha = 1.0
    )
, completion: nil)
let animationDuration = 1.0
UIView.animate(withDuration: animationDuration,
               delay: 0,
               options: [.repeat, .autoreverse],
               animations: 
                   view.alpha = 0.5
               ,
               completion: nil)

如果有意义的话,这两种方法都是在 awakeFromNib() 中触发的。

【问题讨论】:

信息不足。代码就目前而言还可以,但当然一切都取决于view 是什么,这段代码何时运行等等。awakeFromNib 作为开始这个的时间是没有意义的; view 需要在界面中才能发生任何事情。 view 只是 UITableViewCell 中的一个 UIView 出口。为问题添加了更多信息。如果不是 awakeFromNib,动画应该从哪里开始? 【参考方案1】:

prepareForReuse() 中而不是awakeFromNib() 中触发动画会很神奇。正如@matt 在他的评论中提到的那样,在 awakeFromNib() 的层次结构中不存在视图,这看起来是动画开始所必需的。

【讨论】:

以上是关于在 Swift 中重复 alpha 动画的主要内容,如果未能解决你的问题,请参考以下文章

Swift:链式 UIView 动画永远重复? Obj-C 代码不可移植

Swift动画不粘[重复]

不可点击的单元格,温动画在[重复]

无法在 Swift 中使用时间延迟为 UIImage 设置动画

UIView的不透明度和alpha是不是相同[重复]

为贝塞尔曲线的一个点设置动画[重复]