animateWithDuration的问题

时间:2015-01-15 22:58:09

标签: animation swift

像许多其他人一样,我努力让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")
                }
        })

    }

}

1 个答案:

答案 0 :(得分:0)

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

self.view.bringSubviewToFront(viewToRemove)

在开始动画之前。

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

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