2010-05-13 10 views
9

Utworzono widok UIImagePicker/camera z paskiem narzędzi i niestandardowym przyciskiem do wykonania migawki. Nie mogę zmienić sposobu używania domyślnego ze względu na niestandardowy przycisk i rysuję na górze widoku.Wymuś natychmiastowe odświeżenie, zamiast w trakcie następnego uruchomienia pętli

Po naciśnięciu przycisku chcę zrobić zrzut ekranu przy użyciu UIGetScreenImage(); Jednakże pasek narzędzi jest wyświetlane na obrazie, nawet gdybym ją ukryć pierwszy:

//hide the toolbar 
self.toolbar.hidden = YES; 

// capture the screen pixels 
CGImageRef screenCap = UIGetScreenImage(); 

Jestem całkiem pewien, że to dlatego, mimo że pasek narzędzi jest ukryty, to dostaje odświeżana po powrocie funkcyjnych i wjeżdżamy następna pętla - po wywołaniu UIGetScreenImage.

Próbowałem dokonywania następujący dodatek, ale to nie pomogło:

//hide the toolbar 
self.toolbar.hidden = YES; 
[self.toolbar drawRect:CGRectMake(0, 0, 320, 52)]; 

// capture the screen pixels 
CGImageRef screenCap = UIGetScreenImage(); 

Próbowałem też za pomocą setNeedsDisplay, ale to nie działa albo dlatego po raz kolejny remis dzieje po obecnych zwrotów funkcyjnych.

Wszelkie sugestie? Dzięki!

Odpowiedz

3

Spróbuj ukryć elementy interfejsu użytkownika w oddzielnym selektorze i za pomocą metody -performSelectorOnMainThread:withObject:waitUntilDone:, używając YES dla argumentu waitUntilDone. Następnie wykonaj inny selektor do przechwytywania ekranu.

+0

Samo to nie dało, ale niewielki dodatek działał. Zadzwoniłem do selektora przechwytywania ekranu za pomocą [self performSelector: @selector (captureScreen) withObject: nil afterDelay: 0]; i to dostało zadanie. Dzięki za trop! –

+0

[self performSelector: @selector (captureScreen) withObject: nil afterDelay: 0]; faktycznie sprawia, że ​​"captureScreen" działa w następnej pętli uruchamiania. –

8

Aktualizacja odbywa się w pętli uruchamiania.

Wystarczy dodać:

self.toolbar.hidden = TAK;

[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]];

CGImageRef screenCap = UIGetScreenImage();

+0

To działa i jest łatwiejsze do wykonania, dzięki Antoine. –

Powiązane problemy