ios - 在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画

标签 ios swift uiview uiviewanimation

我有一个 UIImageView 的子类,其中我只在 awakeFromNib 方法中创建动画,但动画立即调用完成 block 并且不执行动画。

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()
    }

}

它立即进入完成 block ,不进入 if 语句,动画也从不重复。

UIImageView 已添加到 Storyboard 中,我正在使用自动布局。

最佳答案

awakeFromNib太快了。该 View 还没有父 View ,也没有出现在屏幕上。

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

override func didMoveToWindow() {
    super.didMoveToWindow()

    if window != nil {
        animate()
    }
}

关于ios - 在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954311/

相关文章:

ios - 横向使用 UIImagePickerController

ios - UITableView 在scrollToRow 上跳转?

swift - 如何向导航栏按钮添加操作

swift - 如何在初始化期间正确设置 subview 约束?

ios - 将 UIView 转换为自定义 View

c# - 尝试将 protobuf-net 与预分配对象一起使用

swift - 使用计时器定期更新 NSTableCellView 内的文本字段

ios - 访问协议(protocol)类型的成员在 Swift 中不起作用

ios - 将具有透视变换的 UIView 转换为 UIImage

ios - swift2 上的 Skyepub 显示空白页面