Swift: 加载带有动画的.Xib

Swift: Load .Xib with animation

目前我正在加载一个新的 .Xib of class CreateAnAccount: UIView form a button pressed on another view.

目前它会立即切换到 Xib,这很棒,但是有没有办法让它动画化?下面是按钮中的代码。

    @IBAction func createAnAccount(sender: AnyObject) {
    let createAnAccountView = NSBundle.mainBundle().loadNibNamed("CreateAnAccount", owner: self, options: nil)[0] as! CreateAnAccount
    createAnAccountView.frame = CGRectMake(0, 0, UIScreen.mainScreen().applicationFrame.size.width, UIScreen.mainScreen().applicationFrame.size.height + 20)
    createAnAccountView.loginHandler = loginHandler
    self.addSubview(createAnAccountView)
    println("Create An Account Pressed")
}

你可以这样试试

UIView.transitionWithView(self.view, duration: 0.5, options:UIViewAnimationOptions.CurveEaseInOut,animations: {self.view.addSubview(createAnAccountView)}, completion: nil)  

此外,您更改 UIViewAnimationOptions 以获得所需的效果。

Swift 4。只需将您的动画代码放入 layoutSubviews func。非常适合我。

override func layoutSubviews() {
    super.layoutSubviews()
    animate()
}

func animate() {
    self.transform = CGAffineTransform(scaleX: 0.3, y: 2)
    UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0, options: [.allowUserInteraction, .curveEaseOut], animations: {
        self.transform = .identity
    })
    self.alpha = 1
}

Swift5。 @coldembrace 回答

func animate() {
        self.view.transform = CGAffineTransform(scaleX: 0.3, y: 2)
        UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0, options: [.allowUserInteraction, .curveEaseOut], animations: {
            self.view.transform = .identity
        })
        self.view.alpha = 1
    }