Das Problem
Ich habe zwei View-Controller, beide sind in UINavigationController
s und einem einzelnen UITabBarController
enthalten. Auf einem der View-Controller erstelle ich einen Bubble-Effekt, bei dem ich Blasen auf den Bildschirm zeichne und deren Positionen animiere. Das Problem tritt auf, wenn ich mit der Tab-Leiste zum anderen View-Controller übergehe. Dies führt dazu, dass die CPU auf 100% ansteigt und die Bubbles weiterhin animiert.
Code
Der Code für die Bubbles ist in einer UIView
Unterklasse gekapselt.
Die Methode drawRect
ruft wiederholt die Funktion spawn
auf, um die Ansicht mit Blasen zu füllen.
Im CATransaction
completion-Handler entferne ich die Form aus der Superview und erstelle eine neue. Der Funktionsaufruf an self.spawn()
scheint das Problem zu sein
Am viewDidDisappear
des enthaltenden View-Controllers rufe ich folgendes auf:
Versuche aus Antworten
Ich habe versucht, die Funktion removeAllAnimations
zum UITabBarControllerDelegate
Ich denke, dein Problem ist, dass du nur einen Thread für all diese Sachen verwendest. Bitte spielen Sie herum und schicken Sie alles, was Ihre GUI betrifft, an den Haupt-Thread und vielleicht auch explizit neue spawn
-Instanzen an andere Threads. Sehen Sie, wie das geht. Etwas wie das:
In einem UITabBarController haben die zugeordneten View-Controller eine flache Struktur. Die View-Controller in jeder Registerkarte werden unabhängig voneinander ausgeführt.
Daher muss func removeAllAnimationsFromLayer()
in der Delegate-Methode
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)
Tags und Links ios swift catransaction