在awakeFromNib上调用带有Duration的UIView动画不会执行动画

时间:2018-06-20 17:52:34

标签: ios swift uiview uiviewanimation

我有一个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 个答案:

答案 0 :(得分:1)

awakeFromNib还为时过早。该视图还没有超级视图,也没有出现在屏幕上。

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

override func didMoveToWindow() {
    super.didMoveToWindow()

    if window != nil {
        animate()
    }
}