在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画
Calling UIView animate withDuration on awakeFromNib does not do the animation
我有一个 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,我正在使用自动布局。
awakeFromNib
太快了。该视图还没有超级视图,也没有出现在屏幕上。
如果 window
不是 nil
,我会覆盖 didMoveToWindow
并从那里调用 animate
。
override func didMoveToWindow() {
super.didMoveToWindow()
if window != nil {
animate()
}
}
我有一个 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,我正在使用自动布局。
awakeFromNib
太快了。该视图还没有超级视图,也没有出现在屏幕上。
如果 window
不是 nil
,我会覆盖 didMoveToWindow
并从那里调用 animate
。
override func didMoveToWindow() {
super.didMoveToWindow()
if window != nil {
animate()
}
}