【问题标题】:Calling UIView animate withDuration on awakeFromNib does not do the animation在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画
【发布时间】: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 已添加到情节提要中,我正在使用自动布局。

【问题讨论】:

    标签: ios swift uiview uiviewanimation


    【解决方案1】:

    awakeFromNib 太早了。该视图还没有超级视图,也没有出现在屏幕上。

    如果window 不是nil,我会覆盖didMoveToWindow 并从那里调用animate

    override func didMoveToWindow() {
        super.didMoveToWindow()
    
        if window != nil {
            animate()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多