animateWithDuration 的问题

Issues with animateWithDuration

像许多其他人一样,我正在努力让 animateWithDuration 工作。下面的代码是我尝试 运行 的一个小测试。我想要做的是在后面添加一个 UIView,淡出顶部的 UIView,然后将其删除。问题是淡入淡出动画不会持续整个 10 秒的长度(它实际上会立即完成),尽管完成块会根据需要在 10 秒后执行。

有没有人知道我做错了什么。我是初学者,所以如果我忽略了一些非常简单的事情,我提前道歉。

谢谢!

import UIKit

class ViewController: UIViewController {

    @IBOutlet  var graphView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        graphView.addSubview(createView(UIColor.greenColor()))
    }

    func createView(color: UIColor) -> UIView {
        let viewToReturn = UIView(frame: CGRectMake(0, 0, 320, 354))
        viewToReturn.backgroundColor = color
        return viewToReturn
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func zoomIn() {

        let viewToRemove = graphView.subviews[0] as UIView

        graphView.addSubview(createView(UIColor.redColor()))

        UIView.animateWithDuration(10.0, animations: {
                println("Runs")
                viewToRemove.alpha = 0.0
            }, completion: {(bool) in
                if bool {
                    viewToRemove.removeFromSuperview()
                    println("End")
                }
        })

    }

}

您正在将新 subview 添加到旧 subview 之上。当你调用 addSubView 函数时,新的子视图被添加到旧的之上。这就是动画更改不可见的原因。尝试添加

self.view.bringSubviewToFront(viewToRemove)

在开始动画之前。

或者您可以直接在旧的 using 下面添加新的子视图。

self.view.insertSubview(createView(UIColor.redColor()), belowSubview: viewToRemove)