drawViewHierarchyInRect im Hintergrund Thread

8

Ich versuche, ein "Offscreen-Rendering" in einem Hintergrund-Thread durchzuführen, um eine Vorschau einer Designer-ähnlichen App, die ich erstelle, zu aktualisieren.

Ich habe renderInContext in einer NSOperationQueue-abgeleiteten Warteschlange verwendet, um dies zu erreichen, aber beachte, dass es langsam ist.

Also, ich habe drawViewHierarchyInRect benutzt, was super funktioniert und viel schneller ist. Allerdings habe ich festgestellt, dass meine Benutzeroberfläche vollständig blockiert, wenn diese Methode in der b / g ausgeführt wird.

Wenn ich das im Hauptthread mache ...

%Vor%

... alles funktioniert OK.

Allerdings, wenn ich (sagen wir) das versenden ...

%Vor%

... meine Benutzeroberfläche friert vollständig nach der Ausführung ein.

'ok' gibt YES zurück, also scheint alles zu funktionieren.

Wenn ich afterUpdates auf NO setze, ist 'ok' NO (fehlgeschlagen), aber die Benutzeroberfläche reagiert weiter.

Gibt es irgendwelche Grenzen bei der Verwendung von drawViewHierarchyInRect, außer dem Hauptthread?

    
Fittoburst 01.07.2014, 16:00
quelle

2 Antworten

1

UIKit-Objekte sollten nur im Hauptthread bearbeitet werden. Apples UIKit-Dokumentation erwähnt diesen Spruch

  

Verwenden Sie in den meisten Fällen nur UIKit-Klassen aus dem Hauptthread Ihrer App. Das ist   Dies gilt insbesondere für Klassen, die von UIResponder abgeleitet sind oder die involvieren   Manipulieren der Benutzeroberfläche Ihrer App in irgendeiner Weise.

    
Tom Leu 21.06.2015 16:00
quelle
0

Rufen Sie das obige dispatch_async vom Hauptthread an? Meine Theorie hier ist, dass Sie [preview drawViewHierarchyInRect:preview.bounds afterScreenUpdates:YES]; mit YES aufgerufen haben, das Code auf dem Hauptthread ausführen muss, der Hauptthread wird jedoch auf dem Semaphor blockiert. Was Sie wahrscheinlich tun möchten, ist die Ausbeute an den Haupt-Thread hin und wieder, so dass drawViewHierarchyInRect abgeschlossen werden kann.

%Vor%     
Vijay Sharma 03.02.2016 18:48
quelle