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

Ios UIView animateWithDuration完成块被循环中断;,ios,swift,uiview,Ios,Swift,Uiview,我在Swift 1.2和Xcode中遇到了一个有趣的现象。我对语言和库内部工作的熟悉程度不足以理解为什么会发生这种情况。也许有人能解释。考虑下面的代码块: static func hideSpinner(spinnerViewParent: UIViewController) { for thissubview in spinnerViewParent.view.subviews { if thissubview is SpinnerView {

我在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调用的完成块将无法正确执行

如果您对中断进行注释;,它按预期工作


为什么??打破循环是否会破坏并孤立闭包回调?为什么要去除断裂;让它按预期的方式工作?

这是个奇怪的问题。当您有
中断
时,动画具体做什么?把spinnerView放在superView里

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

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

编辑:
您是否尝试过使用手动数组索引和一个带有布尔
done
标志的while…do循环来重写它?这将证实是break语句导致了问题。

这是一个奇怪的问题。当您有
中断
时,动画具体做什么?把spinnerView放在superView里

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

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

编辑:
您是否尝试过使用手动数组索引和一个带有布尔
done
标志的while…do循环来重写它?这将确认是break语句导致了问题。

您所说的“未正确执行”/“劫持”是什么意思?@AaronBrager它没有执行完成语句?您所说的“未正确执行”/“劫持”是什么意思?@AaronBrager它没有执行完成语句?您所说的“未正确执行”/“劫持”是什么意思?@AaronBrager它不执行completion语句子视图正好停留在那里。。。。它不执行.removeFromSuperview()。我必须尝试一下do循环建议…子视图就在那里。。。。它不执行.removeFromSuperview()。我必须尝试一下do循环建议…子视图就在那里。。。。它不执行.removeFromSuperview()。我得试试那个建议。。。