UIView animateWithDuration完成块被循环中断中断;

时间:2015-06-17 23:26:51

标签: ios swift uiview

我遇到了Swift 1.2和Xcode的有趣现象。我对语言和库内部工作的熟悉程度不足以理解为什么会发生这种情况。也许有人可以解释。请考虑以下代码块:

static func hideSpinner(spinnerViewParent: UIViewController) {

    for thissubview in spinnerViewParent.view.subviews
    {
        if thissubview is SpinnerView {

            UIView.animateWithDuration(0.25, animations: {(thissubview as! SpinnerView).alpha = 0.0}, completion: {completed in thissubview.removeFromSuperview();})

            break; //if you break, it will subvert and hijack the completion closure
        }
    }
}

SpinnerView是UIView的一个简单子类,它在屏幕上抛出一个微调器,提醒用户该应用程序正在思考'。 hideSpinner函数将SpinnerView淡出,然后将其从父视图中删除。

问题是,如果你离开休息时间;在,animateWithDuration调用的完成块将无法正确执行。

如果您注释掉了休息符号,则按预期工作。

为什么呢?打破循环以某种方式颠覆和孤立闭包回调?为什么删除休息;让它按预期工作?

1 个答案:

答案 0 :(得分:0)

这很奇怪。当你拥有break时,动画究竟会做什么?将spinnerView留在它的superView?

您是否尝试在完成块中放置println()以查看代码是否正在执行?

如果它确实是行为不端,那么它可能是一个编译器错误。

编辑:

您是否尝试过使用手动数组索引重写它,然后使用布尔done标志执行一次循环?这将证实它是导致问题的中断声明。