0

コードが大きすぎてここに投稿できません。私の問題は次のとおりです。animateWithDuration:animations:completion:(おそらくオプションを使用して)呼び出すduration == 0.3と、完了ブロックが同じ遅延で呼び出されるという意味ではありません。代わりに2秒で呼び出され、私には長すぎます。

この大きな遅延は通常、メモリ警告の前に表示されますが、予期したとおりに機能する場合もあります。

このような奇妙な動作の原因を説明できる人はいますか?

4

3 に答える 3

0

この問題の原因が判明しました。UIWebViewメインスレッドでレンダリングされる多くのオブジェクトです。そして、それらの負荷を防ぐことは不可能のようです. とにかく、時間プロファイラーは、画面に表示されていなくても、レンダリングに多くの時間が費やされていることを示しています。はい、要件のため、メモリ警告イベントの前にそれらを解放することはできません

于 2015-08-31T07:47:38.203 に答える
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
}
于 2015-07-29T15:19:13.447 に答える
0

これと同様の問題が発生しましたが、シナリオに関する詳細情報がないため、これが問題にも当てはまるかどうかはわかりません.

の完了ブロックで を呼び出しbecomeFirstResponderていました。ロギングは、完了ブロックがタイムリーに呼び出されていることを示しましたが、キーボードが表示されるまでに数秒かかりました。これは、キーボードの最初の起動時にのみ発生していました。UITextFieldanimateWithDuration:delay:options:animations:completion

この回答は、これを解決するのに役立ちました...これはiOSシミュレーターに何らかの形でリンクされていることが判明しました。アプリをデバッグしていないときは、この問題は発生しませんでした...実際には存在しないバグをシミュレーターで何時間も追跡するもう 1 つの典型的な例です。

于 2015-08-26T18:08:33.887 に答える