Animationen, die nicht angehalten werden, nachdem der Ansichtscontroller mithilfe der Registerkartenleiste beendet wurde

9

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.

%Vor%

Die Methode drawRect ruft wiederholt die Funktion spawn auf, um die Ansicht mit Blasen zu füllen.

%Vor%

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:

%Vor%

Versuche aus Antworten
Ich habe versucht, die Funktion removeAllAnimations zum UITabBarControllerDelegate

hinzuzufügen %Vor%     
Ollie 14.09.2016, 19:39
quelle

2 Antworten

1

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:

%Vor%     
RyuX51 27.09.2016, 12:33
quelle
0

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

hinzugefügt werden

func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)

    
m177312 27.09.2016 11:22
quelle

Tags und Links