No iOS 8, estou tendo problemas para capturar imagens da câmera até agora, estou usando este código para
UIImagePickerController *controller=[[UIImagePickerController alloc] init];
controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
controller.delegate=(id)self;
controller.sourceType=UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];
Mas no iOS 8 eu estou conseguindo isso:
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.
Eu tentei com a solução fornecida por este post com
@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];
e isto
...
controller.modalPresentationStyle=UIModalPresentationFullScreen;
or
controller.modalPresentationStyle=UIModalPresentationCurrentContext;
...
e isto
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];
});
e isto
[self presentViewController:controller animated:YES completion:NULL];
e isto
[self presentViewController:controller animated:YES completion:^{
}];
qualquer ideia?
objective-c
ios8
uiimagepickercontroller
souvickcse
fonte
fonte
dispatch_async(dispatch_get_main_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
Respostas:
Tenho certeza de que isso é apenas um bug no iOS 8.0. É reproduzível com os aplicativos POC mais simples que não fazem nada além de tentar apresentar o
UIImagePickerController
que você está fazendo acima. Além disso, não há um padrão alternativo para exibir o seletor de imagens / câmera, que eu saiba. Você pode até baixar o aplicativo de exemplo Using UIImagePickerController da Apple , executá-lo e ele gerará o mesmo erro imediatamente .Dito isto, a funcionalidade ainda funciona para mim. Além do aviso / erro, você tem problemas com o funcionamento do seu aplicativo?
fonte
Eu estava lutando com esse problema por várias horas, li todos os tópicos relevantes e descobri que o erro foi causado porque, nas configurações de privacidade do meu dispositivo, o acesso da câmera ao meu aplicativo foi bloqueado !!! Nunca neguei o acesso à câmera e não sei como foi bloqueada, mas esse era o problema!
fonte
Não tenho pontos de reputação suficientes para comentar a resposta de @ greg acima, por isso adicionarei minhas observações aqui. Eu tenho um projeto Swift para iPad e iPhone. Eu tenho um método dentro do meu controlador de exibição principal (bit relevante abaixo). Quando eu testo isso em um telefone, tudo funciona corretamente e nenhum aviso é gerado. Quando o executo em um iPad, tudo funciona corretamente, mas recebo o aviso de captura instantânea da exibição. O interessante, porém, é que, quando eu corro em um iPad sem usar o controlador popover, tudo funciona corretamente sem aviso. Infelizmente, a Apple exige que o seletor de imagens seja usado dentro de uma janela popover no iPad, se a câmera não estiver sendo usada.
fonte
Eu me deparei com isso depois de chamar UIImagePickerController presentViewController: do retorno de chamada para um delegado UIAlertView. Resolvi o problema pressionando o presentViewController: cancele o rastreamento de execução atual usando dispatch_async.
fonte
Eu tive esse problema ao animar algumas visualizações e o aplicativo entra no modo de segundo plano e volta. Eu lidei com isso definindo uma bandeira como Ativa. Coloquei-o como NÃO em
e SIM em
e animar ou não animar meus pontos de vista de acordo. Cuidou do problema.
fonte
Eu tive isso com um UIAlertControllerStyleActionSheet, dando ao usuário a opção de tirar uma foto com a câmera ou usar uma da biblioteca.
Eu tentei um ponto de interrupção simbólico na mensagem de erro
Isso me mostrou que o erro é produzido pelo uso interno de um UICollectionView durante a apresentação
Corrigi isso definindo explicitamente o quadro antes de apresentar
Aqui está o método completo que está funcionando sem o erro
fonte
Você pode silenciar o aviso "Snapshotting a view" referenciando a
view
propriedade antes de apresentar o controlador de exibição. Fazer isso faz com que a exibição seja carregada e permite que o iOS a renderize antes de tirar a captura instantânea.fonte
cameraOverlayView
, infelizmente ainda sinto esse problema, mesmo quando aplico esta dica.Para quem vê um problema com uma visualização em preto após a captura de imagem, ocultar a barra de status após a exibição do UIPickerController parece corrigir o problema.
fonte
Encontrei o mesmo problema e tentei de tudo. Eu tenho dois aplicativos diferentes, um no objetivo-C e outro no rápido - ambos têm o mesmo problema. A mensagem de erro aparece no depurador e a tela fica preta após a primeira foto. Isso acontece apenas no iOS> = 8.0, obviamente é um bug.
Eu encontrei uma solução difícil. Desligue os controles da câmera com imagePicker.showsCameraControls = false e crie seu próprio overlayView com os botões ausentes. Existem vários tutoriais sobre como fazer isso. A estranha mensagem de erro permanece, mas pelo menos a tela não fica preta e você tem um aplicativo em funcionamento.
fonte
Isso pode ser um erro do ImagePickerController interno. Meu código está funcionando, mas ocasionalmente trava no iPhone 6 Plus.
Eu tentei todas as soluções sugeridas por outras respostas, mas não houve sorte. Problema finalmente resolvido após a mudança para JPSImagePickerController .
fonte
Eu tentei de tudo, meu problema era que o seletor de imagens para a câmera e a biblioteca de fotos desapareceu logo após a exibição. Eu o resolvi com a seguinte linha (rápida)
fonte
Tenho certeza de que isso é apenas um bug no iOS 8.0. É reproduzível com os aplicativos POC mais simples que não fazem nada além de tentar apresentar um UIImagePickerController como você está fazendo acima. Além disso, não há um padrão alternativo para exibir o seletor de imagens / câmera, que eu saiba. Você pode até baixar o aplicativo de exemplo Using UIImagePickerController da Apple, executá-lo e ele gerará o mesmo erro imediatamente.
Dito isto, a funcionalidade ainda funciona para mim. Além do aviso / erro, você tem problemas com o funcionamento do seu aplicativo?
fonte
Se estivermos usando o
UIImagePickerController
propriedade como, esse aviso desaparecerá.xcodesuponha que não estamos usando o resultado deUIImagePickerController
, se estamos instanciando oUIImagePickerController
dentro de uma função.fonte
Chamar esse método funcionou para mim. Coloque-o depois de apresentar sua exibição.
fonte
Também encontrei o mesmo problema e resolvi-o verificando se a câmera está disponível:
fonte
Me deparei com este problema. Quando ligamos para a câmera e liberamos as visualizações produzidas esse problema. Por exemplo, chame uma câmera e defina view nil no método viewDidDisappear, esse erro ocorrerá, pois não há retorno de chamada para o evento da câmera. Verifique também este caso para esse erro.
fonte
Eu recebi o mesmo bug, recebendo a mensagem abaixo no console enquanto abria a câmera.
A captura instantânea de uma exibição que não foi renderizada resulta em uma captura instantânea vazia. Certifique-se de que sua exibição tenha sido renderizada pelo menos uma vez antes de fazer o snapshot ou após as atualizações da tela. '
Para mim, o problema estava com o nome de exibição do pacote no arquivo Info.plist. Estava vazio de alguma forma, coloquei o nome do meu aplicativo lá e agora está funcionando bem. Não recebi nenhum alerta de permissão da câmera por causa do nome de exibição do pacote vazio.it impediu a exibição da renderização.
o problema não estava no modo de exibição, mas apresentando-o sem uma permissão. você pode verificá-lo nas configurações -> privacidade -> câmera, se o aplicativo não estiver listado, o problema pode ser o mesmo.
fonte
Estou usando o Phonegap, mas esse tópico continua sendo o primeiro ao pesquisar a mensagem de erro no Google.
Para mim, esse problema desapareceu ao definir o tipo de imagem para PNG.
Portanto, toda a linha é:
Sua milhagem pode variar, mas esse foi o truque para mim.
fonte
Como alternativa, considere usar
drawViewHierarchyInRect
:Rápido:
Objetivo-C:
Veja também:
fonte
No meu caso (XCode 7 e iOS 9), eu uso
UINavigationController
"oculto", então tenho que adicionarUINavigationControllerDelegate
à câmera ou rolo presente e funcionar como deveria!And pickerControllerDelegate.self
também não exibe erro!fonte