W iOS 8 mam problem z przechwytywaniem zdjęć z aparatu, do tej pory używam tego kodu
UIImagePickerController *controller=[[UIImagePickerController alloc] init];
controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
controller.delegate=(id)self;
controller.sourceType=UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];
Ale w iOS 8 otrzymuję to:
Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
Próbowałem z rozwiązaniem dostarczonym przez ten post z
@property (strong,nonatomic)UIImagePickerController *controller;
_controller=[[UIImagePickerController alloc] init];
_controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
_controller.delegate=(id)self;
_controller.sourceType=UIImagePickerControllerSourceTypeCamera;
_[self presentViewController:controller animated:YES completion:nil];
i to
...
controller.modalPresentationStyle=UIModalPresentationFullScreen;
or
controller.modalPresentationStyle=UIModalPresentationCurrentContext;
...
i to
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self presentViewController:controller animated:YES completion:nil];
});
i to
[self presentViewController:controller animated:YES completion:NULL];
i to
[self presentViewController:controller animated:YES completion:^{
}];
dowolny pomysł?
objective-c
ios8
uiimagepickercontroller
souvickcse
źródło
źródło
dispatch_async(dispatch_get_main_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
zmieniłem nadispatch_async(dispatch_get_main_queue(), ^{
Odpowiedzi:
Jestem prawie pewien, że to tylko błąd w iOS 8.0. Jest to powtarzalne w przypadku najprostszych aplikacji POC, które nie robią nic więcej, jak tylko próbują zaprezentować się
UIImagePickerController
tak, jak powyżej. Co więcej, według mojej wiedzy nie ma alternatywnego wzorca wyświetlania selektora / kamery obrazu. Możesz nawet pobrać przykładową aplikację Apple Using UIImagePickerController , uruchomić ją, a ona wygeneruje ten sam błąd po wyjęciu z pudełka.To powiedziawszy, funkcjonalność nadal działa dla mnie. Czy oprócz ostrzeżenia / błędu masz problemy z działaniem aplikacji?
źródło
Walczyłem z tym problemem przez kilka godzin, przeczytałem każdy odpowiedni temat i dowiedziałem się, że błąd został spowodowany, ponieważ w ustawieniach prywatności mojego urządzenia dostęp kamery do mojej aplikacji został zablokowany !!! Nigdy nie odmawiałem dostępu do kamery i nie wiem, jak została zablokowana, ale to był problem!
źródło
Nie mam wystarczającej liczby punktów reputacji, aby skomentować powyższą odpowiedź @ greg, dlatego dodam tutaj moje spostrzeżenia. Mam projekt Swift na iPada i iPhone'a. Mam metodę w moim głównym kontrolerze widoku (odpowiedni bit poniżej). Kiedy testuję to na telefonie, wszystko działa poprawnie i nie są generowane żadne ostrzeżenia. Kiedy uruchamiam go na iPadzie, wszystko działa poprawnie, ale widzę ostrzeżenie o migawce widoku. Ciekawe jest jednak to, że kiedy uruchamiam na iPadzie bez użycia kontrolera popover, wszystko działa poprawnie bez ostrzeżenia. Niestety, Apple nakazuje, aby próbnik obrazu był używany w oknie popover na iPadzie, jeśli aparat nie jest używany.
źródło
Natknąłem się na to po wywołaniu UIImagePickerController presentViewController: od wywołania zwrotnego do delegata UIAlertView. Rozwiązałem problem, wypychając presentViewController: wywołaj bieżące śledzenie wykonania przy użyciu dispatch_async.
źródło
Miałem ten problem podczas animowania niektórych widoków, a aplikacja przechodziła w tryb tła i wracała. Poradziłem sobie z tym ustawiając flagę na Aktywną. Ustawiłem na NIE
i TAK w
i odpowiednio animuj lub nie animuj moich poglądów. Zajęłam się tym problemem.
źródło
Miałem to z UIAlertControllerStyleActionSheet dając użytkownikowi opcję zrobienia zdjęcia aparatem lub skorzystania z biblioteki.
Próbowałem symbolicznego punktu przerwania w komunikacie o błędzie
To pokazało mi, że błąd jest generowany przez wewnętrzne użycie UICollectionView podczas prezentacji
Naprawiłem to poprzez szybkie ustawienie ramki przed prezentacją
Oto pełna metoda działająca bez błędu
źródło
Można wyciszyć ostrzeżenie „Migawka widoku”, odwołując się do
view
właściwości przed przedstawieniem kontrolera widoku. Spowoduje to załadowanie widoku i umożliwi iOS renderowanie go przed zrobieniem migawki.źródło
cameraOverlayView
, niestety nadal mam ten problem, nawet gdy zastosuję tę wskazówkę.Dla każdego, kto widzi problem z czarnym podglądem po przechwyceniu obrazu, ukrywanie paska stanu po wyświetleniu UIPickerController wydaje się rozwiązać ten problem.
źródło
Znalazłem ten sam problem i próbowałem wszystkiego. Mam dwie różne aplikacje, jedną w celu C i drugą w trybie szybkim - oba mają ten sam problem. Komunikat o błędzie pojawia się w debuggerze, a ekran robi się czarny po pierwszym zdjęciu. Dzieje się tak tylko w iOS> = 8.0, oczywiście jest to błąd.
Znalazłem trudne obejście. Wyłącz sterowanie kamerą za pomocą imagePicker.showsCameraControls = false i utwórz własną nakładkę z brakującymi przyciskami. Istnieją różne samouczki dotyczące tego, jak to zrobić. Dziwny komunikat o błędzie pozostaje, ale przynajmniej ekran nie robi się czarny i masz działającą aplikację.
źródło
Może to być błąd wbudowanego ImagePickerController. Mój kod działa, ale czasami ulega awarii na telefonie iPhone 6 Plus.
Wypróbowałem wszystkie rozwiązania sugerowane przez inne odpowiedzi, ale nie miałem szczęścia. Problem ostatecznie rozwiązany po przejściu na JPSImagePickerController .
źródło
Próbowałem już wszystkiego, mój problem polegał na tym, że próbnik obrazów do aparatu i biblioteki zdjęć zniknął zaraz po ich wyświetleniu. Rozwiązałem to następującą linią (szybkie)
źródło
Jestem prawie pewien, że to tylko błąd w iOS 8.0. Jest odtwarzalny z najprostszymi aplikacjami POC, które nie robią nic więcej, jak tylko próbują zaprezentować UIImagePickerController tak, jak robisz to powyżej. Co więcej, według mojej wiedzy nie ma alternatywnego wzorca wyświetlania selektora / kamery obrazu. Możesz nawet pobrać przykładową aplikację Apple Using UIImagePickerController, uruchomić ją, a ona wygeneruje ten sam błąd po wyjęciu z pudełka.
To powiedziawszy, funkcjonalność nadal działa dla mnie. Czy oprócz ostrzeżenia / błędu masz problemy z działaniem aplikacji?
źródło
Jeśli używamy
UIImagePickerController
jako jako właściwości, to ostrzeżenie zniknie.xcodeZałóżmy, że nie używamy wyniku zUIImagePickerController
, jeśli tworzymy instancjęUIImagePickerController
wewnątrz funkcji.źródło
Wywołanie tej metody działało dla mnie. Umieść go po przedstawieniu swojego widoku.
źródło
Mam również ten sam problem i rozwiązałem go, sprawdzając, czy kamera jest dostępna:
źródło
Natknąłem się na ten problem. Kiedy wywołujemy aparat i udostępniamy widoki spowodowały ten problem. Na przykład zadzwoń do kamery i ustaw widok zero w metodzie viewDidDisappear, ten błąd wystąpi, ponieważ nie ma wywołania zwrotnego dla zdarzenia kamery. Upewnij się również o tym przypadku dla tego błędu.
źródło
Mam ten sam błąd, otrzymuję poniżej komunikat w konsoli podczas otwierania aparatu.
„Migawka widoku, który nie został zrenderowany, powoduje powstanie pustej migawki. Upewnij się, że widok został zrenderowany co najmniej raz przed migawką lub migawką po aktualizacji ekranu. ”
Dla mnie problem polegał na wyświetleniu nazwy pakietu w pliku Info.plist. W pewnym sensie był pusty, umieściłem tam nazwę mojej aplikacji i teraz działa dobrze. Nie otrzymałem żadnego powiadomienia o pozwoleniu na aparat z powodu pustej nazwy wyświetlanej pakietu. It zablokował renderowanie widoku.
problem nie dotyczył widoku, ale przedstawiając go bez pozwolenia. możesz to sprawdzić w ustawieniach -> prywatność -> Aparat, jeśli Twojej aplikacji nie ma na liście, problem może być taki sam.
źródło
Korzystam z Phonegap, ale ten wątek pojawia się jako pierwszy, gdy Googling wyświetla komunikat o błędzie.
Dla mnie ten problem zniknął, definiując typ obrazu w formacie PNG.
Cała linia jest:
Twój przebieg może się różnić, ale to załatwiło sprawę.
źródło
Możesz też rozważyć użycie
drawViewHierarchyInRect
:Szybki:
Cel C:
Zobacz także:
źródło
W moim przypadku (XCode 7 i iOS 9) używam
UINavigationController
„ukrytego”, więc muszę dodaćUINavigationControllerDelegate
do obecnej kamery lub rolki i działa tak, jak powinno!And pickerControllerDelegate.self
też nie wyświetla błędu!źródło