(animateWithDuration:动画:完成:)中的完成块无法预测延迟

时间:2015-07-29 14:49:10

标签: ios animation delay animatewithduration completion

代码太大了,无法在此处发布。我的问题如下。当我使用animateWithDuration:animations:completion:调用duration == 0.3(可能带有选项)时,并不意味着将通过相同的延迟调用完成块。它被称为2秒,对我来说太长了。

此大延迟通常出现在内存警告之前,但有时可能会按预期工作。

有人可以解释可能导致这种奇怪行为的原因吗?

3 个答案:

答案 0 :(得分:0)

是否涉及定时器,如动画定时器触发? 当我的动画被定时器触发时,我遇到了类似的问题。事实证明动画不止一次启动。 animationOngoing标志在完成之前停止动画再次启动。

// Timer function
    func timerTextToggle(timer: NSTimer) {
    if self.animationOngoing == false {
        self.flipAnimation()
    }
}

// Animation function
func flipAnimation() {
// important note: it's UIViewAnimationOptions,
// not UIViewAnimationTransition
    self.animationOngoing = true
    if self.animationToggle == false {
        UIView.transitionFromView(self.singleTapLabel!,
            toView: self.doubleTapLabel!,
            duration: animDuration,
            options: UIViewAnimationOptions.TransitionFlipFromBottom,
            completion: {
                (value: Bool) in
                self.animationOngoing = false
        })
    } else {
        UIView.transitionFromView(self.doubleTapLabel!,
            toView: self.singleTapLabel!,
            duration: animDuration,
            options: UIViewAnimationOptions.TransitionFlipFromTop,
            completion: {
                (value: Bool) in
                self.animationOngoing = false
        })
    }
    self.animationToggle = !self.animationToggle
}

答案 1 :(得分:0)

我遇到了类似的问题,虽然没有关于您的方案的进一步信息,但我不知道这是否也适用于您的问题。

我在becomeFirstResponder的完成区中的UITextField上呼叫animateWithDuration:delay:options:animations:completion。记录显示正在及时调用完成块,但键盘需要几秒钟才能显示。这只发生在首次启动键盘时。

This answer帮我解决了这个问题......结果发现这与iOS模拟器有某种联系。当我没有调试应用程序时,这个问题没有发生......另一个在模拟器中追踪数小时的错误的经典例子并没有实际存在。

答案 2 :(得分:0)

找到了这个问题的原因。它是在主线程中呈现的很多UIWebView个对象。似乎不可能阻止他们的装载。无论如何,时间分析器显示即使它们在屏幕上不可见,也花费大量时间来渲染它们。 是的,由于要求

,我无法在内存警告事件之前释放它们