在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画
Posted
技术标签:
【中文标题】在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画【英文标题】:Calling UIView animate withDuration on awakeFromNib does not do the animation 【发布时间】:2018-06-20 17:52:33 【问题描述】:我有一个 UIImageView 的子类,其中我只在 awakeFromNib 方法中创建动画,但动画立即调用完成块并且不执行动画。
class UISeagull: UIImageView
override func awakeFromNib()
super.awakeFromNib()
animate()
private func animate()
UIView.animate(withDuration: 2, delay: 0, options: [.repeat,.autoreverse], animations:
self.transform = CGAffineTransform(translationX: 0, y: 7).rotated(by: -20 * (.pi / 180)).scaledBy(x: 0.8, y: 0.8)
) (finish) in
if finish
self.transform = .identity
deinit
self.layer.removeAllAnimations()
立即进入完成块,不进入if语句,动画也不再重复。
UIImageView 已添加到情节提要中,我正在使用自动布局。
【问题讨论】:
【参考方案1】:awakeFromNib
太早了。该视图还没有超级视图,也没有出现在屏幕上。
如果window
不是nil
,我会覆盖didMoveToWindow
并从那里调用animate
。
override func didMoveToWindow()
super.didMoveToWindow()
if window != nil
animate()
【讨论】:
以上是关于在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画的主要内容,如果未能解决你的问题,请参考以下文章