子类化UIView时,Swift过渡动画不起作用

时间:2017-11-27 04:30:21

标签: swift animation uiview subclass

在将此动画连接到我的ViewController并从ViewDidAppear调用后将此动画应用于UIView,UIButton或UILabel时,它可以正常工作:

 UIView.transition(with: self.myButton, duration: 5, options: .transitionFlipFromRight, animations: nil, completion: nil)

然而,问题是,当我在继承自UIView的自定义类中输入该动画时,将其设置为我的故事板中的该对象,并传递" self"进入"用:"参数,并把它放在AwakeFromNib上,它不起作用:

class myAnimatedView: UIView {

    override func awakeFromNib() {
         self.layoutIfNeeded()
         UIView.transition(with: self, duration: 15, options: .transitionFlipFromRight, animations: nil, completion: nil)}
    }

}

我在AwakeFromNib上应用的其他动画在这样的子类上工作正常 -  例如,这很好用:

UIView.animate(withDuration: 5.0, delay: 0.5, usingSpringWithDamping: 0.2, initialSpringVelocity: 5.0, options: UIViewAnimationOptions(rawValue: UInt(0)), animations:({//my animations here}))

我做错了什么?使用Xcode 9.1,Swift 4.非常感谢

1 个答案:

答案 0 :(得分:1)

我认为您的代码/架构存在一些问题:

  1. awakeFromNib不是触发动画的正确位置,请查看here
  2. 你说要添加这个

    UIView.animate(withDuration: 5.0, delay: 0.5, usingSpringWithDamping: 0.2, initialSpringVelocity: 5.0, options: UIViewAnimationOptions(rawValue: UInt(0)), animations:({//my animations here}))
    
    你的awakeFromNib中的

    很好,但是我注意到延迟为0.5,所以视图已经准备就绪并且在动画启动时被唤醒了

  3. 最终你可能会使用didMoveToWindow()来自动设置你的东西 https://developer.apple.com/documentation/uikit/uiview/1622527-didmovetowindow