In iOS 8 habe ich Probleme beim Aufnehmen von Bildern von der Kamera, bis jetzt verwende ich diesen Code für
UIImagePickerController *controller=[[UIImagePickerController alloc] init];
controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
controller.delegate=(id)self;
controller.sourceType=UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];
Aber in iOS 8 bekomme ich folgendes:
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.
Ich habe mit dem von einer dritten Lösung versucht Dieser Beitrag mit
@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];
und das
...
controller.modalPresentationStyle=UIModalPresentationFullScreen;
or
controller.modalPresentationStyle=UIModalPresentationCurrentContext;
...
und das
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];
});
und das
[self presentViewController:controller animated:YES completion:NULL];
und das
[self presentViewController:controller animated:YES completion:^{
}];
irgendeine Idee?
objective-c
ios8
uiimagepickercontroller
souvickcse
quelle
quelle
dispatch_async(dispatch_get_main_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
Antworten:
Ich bin mir ziemlich sicher, dass dies nur ein Fehler in iOS 8.0 ist. Es ist mit der einfachsten POC-App reproduzierbar, die nichts weiter tut als zu versuchen, ein
UIImagePickerController
ähnliches zu präsentieren, wie Sie es oben tun. Darüber hinaus gibt es meines Wissens kein alternatives Muster zur Anzeige des Bildwählers / der Bildkamera. Sie können sogar die Beispiel-App " Using UIImagePickerController" von Apple herunterladen , ausführen und den gleichen Fehler sofort generieren.Trotzdem funktioniert die Funktionalität immer noch für mich. Haben Sie außer der Warnung / dem Fehler Probleme mit der Funktionsweise Ihrer App?
quelle
Ich hatte mehrere Stunden mit diesem Problem zu kämpfen. Ich habe jedes relevante Thema gelesen und festgestellt, dass der Fehler verursacht wurde, weil unter den Datenschutzeinstellungen meines Geräts der Kamerazugriff auf meine App blockiert war !!! Ich habe den Zugang zur Kamera nie verweigert und ich weiß nicht, wie sie blockiert wurde, aber das war das Problem!
quelle
Ich habe nicht genügend Reputationspunkte, um die Antwort von @ greg oben zu kommentieren, daher werde ich meine Beobachtungen hier hinzufügen. Ich habe ein Swift-Projekt für iPad und iPhone. Ich habe eine Methode in meinem Hauptansichts-Controller (relevantes Bit unten). Wenn ich dies auf einem Telefon teste, funktioniert alles ordnungsgemäß und es werden keine Warnungen generiert. Wenn ich es auf einem iPad ausführe, funktioniert alles einwandfrei, aber ich sehe die Warnung bezüglich des Schnappschusses der Ansicht. Das Interessante ist jedoch, dass, wenn ich auf einem iPad ohne Verwendung des Popover-Controllers laufe, alles ohne Vorwarnung ordnungsgemäß funktioniert. Leider schreibt Apple vor, dass die Bildauswahl in einem Popover auf dem iPad verwendet werden muss, wenn die Kamera nicht verwendet wird.
quelle
Ich bin darauf gestoßen, nachdem ich UIImagePickerController presentViewController aufgerufen hatte: vom Rückruf an einen UIAlertView-Delegaten. Ich habe das Problem gelöst, indem ich den presentViewController gedrückt habe: Rufe den aktuellen Ausführungs-Trace mit dispatch_async auf.
quelle
Ich hatte dieses Problem beim Animieren einiger Ansichten und die App ging in den Hintergrundmodus und kehrte zurück. Ich habe es gehandhabt, indem ich ein Flag isActive gesetzt habe. Ich habe es auf NEIN gesetzt
und JA in
und meine Ansichten entsprechend animieren oder nicht animieren. Kümmerte sich um das Problem.
quelle
Ich hatte dies mit einem UIAlertControllerStyleActionSheet, das dem Benutzer die Möglichkeit gab, ein Foto mit der Kamera aufzunehmen oder eines aus der Bibliothek zu verwenden.
Ich habe versucht, einen symbolischen Haltepunkt für die Fehlermeldung festzulegen
Das hat mir gezeigt, dass der Fehler durch die interne Verwendung einer UICollectionView während der Präsentation verursacht wird
Ich habe dies behoben, indem ich den Rahmen vor dem Präsentieren explizit eingestellt habe
Hier ist die vollständige Methode, die ohne Fehler funktioniert
quelle
Sie können die Warnung "Snapshotting einer Ansicht" stumm schalten, indem Sie auf die
view
Eigenschaft verweisen, bevor Sie den Ansichts-Controller anzeigen. Dadurch wird die Ansicht geladen und iOS kann sie rendern, bevor der Schnappschuss erstellt wird.quelle
cameraOverlayView
, tritt dieses Problem leider auch dann noch auf, wenn ich diesen Tipp anwende.Für alle, die nach der Bildaufnahme ein Problem mit einer schwarzen Vorschau sehen, scheint das Ausblenden der Statusleiste nach dem Anzeigen des UIPickerControllers das Problem zu beheben.
quelle
Ich fand das gleiche Problem und versuchte alles. Ich habe zwei verschiedene Apps, eine in Objective-C und eine in Swift - beide haben das gleiche Problem. Die Fehlermeldung wird im Debugger angezeigt und der Bildschirm wird nach dem ersten Foto schwarz. Dies passiert nur in iOS> = 8.0, offensichtlich ist es ein Fehler.
Ich habe eine schwierige Problemumgehung gefunden. Schalten Sie die Kamerasteuerung mit imagePicker.showsCameraControls = false aus und erstellen Sie eine eigene OverlayView mit den fehlenden Schaltflächen. Es gibt verschiedene Tutorials dazu. Die seltsame Fehlermeldung bleibt bestehen, aber zumindest wird der Bildschirm nicht schwarz und Sie haben eine funktionierende App.
quelle
Dies könnte ein Fehler des integrierten ImagePickerController sein. Mein Code funktioniert, stürzt aber gelegentlich auf dem iPhone 6 Plus ab.
Ich habe alle von anderen Antworten vorgeschlagenen Lösungen ausprobiert, aber es gab kein Glück. Problem nach dem Wechsel zu JPSImagePickerController endgültig gelöst .
quelle
Ich habe alles versucht, mein Problem war, dass der Bildwähler für die Kamera und die Fotobibliothek sofort nach dem Anzeigen verschwand. Ich habe es mit der folgenden Zeile gelöst (schnell)
quelle
Ich bin mir ziemlich sicher, dass dies nur ein Fehler in iOS 8.0 ist. Es ist mit der einfachsten POC-App reproduzierbar, die lediglich versucht, einen UIImagePickerController wie oben zu präsentieren. Darüber hinaus gibt es meines Wissens kein alternatives Muster zur Anzeige des Bildwählers / der Bildkamera. Sie können sogar Apples Beispiel-App Using UIImagePickerController herunterladen, ausführen und den gleichen Fehler sofort generieren.
Trotzdem funktioniert die Funktionalität immer noch für mich. Haben Sie außer der Warnung / dem Fehler Probleme mit der Funktionsweise Ihrer App?
quelle
Wenn wir die verwenden
UIImagePickerController
als Eigenschaft verwenden, verschwindet diese Warnung.xcodeNehmen wir an, dass wir das Ergebnis von nicht verwendenUIImagePickerController
, wenn wir dasUIImagePickerController
innerhalb einer Funktion instanziieren .quelle
Das Aufrufen dieser Methode hat bei mir funktioniert. Platzieren Sie es, nachdem Sie Ihre Ansicht präsentiert haben.
quelle
Ich habe auch das gleiche Problem und habe es behoben, indem ich überprüft habe, ob die Kamera verfügbar ist:
quelle
Ich bin auf dieses Problem gestoßen. Wenn wir die Kamera aufrufen und die Ansichten freigeben, entsteht dieses Problem. Rufen Sie beispielsweise eine Kamera auf und setzen Sie in der viewDidDisappear-Methode die Ansicht auf Null. Dieser Fehler tritt auf, da für das Kameraereignis kein Rückruf erfolgt. Stellen Sie auch für diesen Fehler sicher, dass dieser Fall vorliegt.
quelle
Ich habe den gleichen Fehler, als ich beim Öffnen der Kamera eine Balgmeldung in der Konsole erhielt.
'Schnappschuss einer Ansicht, die nicht gerendert wurde, führt zu einem leeren Schnappschuss. Stellen Sie sicher, dass Ihre Ansicht mindestens einmal gerendert wurde, bevor Sie einen Schnappschuss oder einen Schnappschuss nach Bildschirmaktualisierungen erstellen. '
Für mich war das Problem mit dem Bundle-Anzeigenamen in der Datei Info.plist. Es war irgendwie leer. Ich habe meinen App-Namen dort abgelegt und jetzt funktioniert es einwandfrei. Ich habe wegen des leeren Bundle-Anzeigenamens.it keine Benachrichtigung über die Kameraberechtigung erhalten blockierte das Rendern der Ansicht.
Das Problem lag nicht in der Ansicht, sondern in der Darstellung ohne Erlaubnis. Sie können es unter Einstellungen -> Datenschutz -> Kamera überprüfen, wenn Ihre App dort nicht aufgeführt ist. Das Problem ist möglicherweise dasselbe.
quelle
Ich verwende Phonegap, aber dieser Thread wird immer wieder als erster angezeigt, wenn über die Fehlermeldung gegoogelt wird.
Für mich wurde dieses Problem behoben, indem der Imagetyp für PNG definiert wurde.
Die ganze Zeile lautet also:
Ihr Kilometerstand kann variieren, aber das hat mir geholfen.
quelle
Alternativ können Sie Folgendes verwenden
drawViewHierarchyInRect
:Schnell:
Ziel c:
Siehe auch:
quelle
In meinem Fall (XCode 7 und iOS 9) verwende ich
UINavigationController
"versteckt", also muss ich dieUINavigationControllerDelegate
aktuelle Kamera oder Rolle hinzufügen und es funktioniert so, wie es soll!And pickerControllerDelegate.self
zeigt auch keinen Fehler an!quelle