Pergunta

Estou tentando usar a interface UiImagePickerController do OS 3.1, com o CameraOverlayView e a TakePicture, mas claramente não consegui entender como isso funciona e, portanto, não estou recebendo o comportamento que quero.

O que eu quero fazer é abrir a câmera e tirar uma foto automaticamente sem ter que fazer com que o usuário interaja com o seletor ou edite a imagem. Então, subclasse UiImagePickerController (semelhante ao exemplo em http://github.com/pmark/helpful-iphone-utilities/tree/master/btl%20utilities/) e desligar todos os controles:

- (void)displayModalWithController:(UIViewController*)controller animated:(BOOL)animated {
self.sourceType = UIImagePickerControllerSourceTypeCamera;
self.showsCameraControls = NO;
self.navigationBarHidden = YES;
self.toolbarHidden = YES;
    // Setting the overlay view up programmatically.
ipView = [[ImagePickerView alloc] init];
self.cameraOverlayView = ipView;
[controller presentModalViewController:self animated:NO];
}

No OverlayView, consegui forçar o método de takepicture do UiImagePickerController a disparar (eu sei disso, porque posso nlogar e ouço o som da câmera tirando uma foto). O OverlayView aparece muito bem. No entanto, o método do delegado não se tornou o MediaWithInfo: nunca é chamado, e o ImagePickerControllerDidCancel também não é chamado.

Então, como faço para obter os métodos delegados para serem chamados ou salvar a imagem substituindo o método de captação? (Não tenho idéia de como capturar os dados da imagem aqui, e o Google parece ter falhado em mim). Não posso deixar de sentir que não consegui entender como as tripas do UiImagePickerController funcionam, mas os documentos não são excessivamente úteis:

por exemplo:

"Você pode fornecer uma exibição de sobreposição personalizada para exibir uma interface de tirar fotos personalizada e iniciar a tiragem de fotos do seu código. Sua exibição de sobreposição personalizada pode ser exibida, além de, ou em vez de, os controles padrão fornecidos pela imagem interface do selecionador. "

ou de Showcameracontrols:

"Se você definir esta propriedade como não e fornecer seus próprios controles personalizados, poderá tirar várias fotos antes de descartar a interface do seletor de imagem". - Como faço para dispensar a interface do seletor?

Nota: O delegado está definido corretamente no IB, então esse não é o problema.

Obrigado por qualquer ajuda que você possa fornecer!

Foi útil?

Solução

Eu descobri que você só precisa esperar "tempo suficiente" antes de ligar takePicture, ou apenas falha silenciosamente. Não tenho uma boa resposta sobre como determinar o valor mínimo de "tempo suficiente", que sempre funcionará, mas se você definir um cronômetro e esperar cinco ou dez segundos, ficará bem. Seria bom se retornasse algum tipo de erro "Não estou pronto para tirar uma foto ainda, desculpe" diretamente de takePicture Ou através do delegado, mas até onde eu sei, não.

Outras dicas

Como atualização da minha própria pergunta: acontece que eu estava tentando usar o TakePicture muito cedo. Quando movi a ação para um botão na sobreposição e enviei a TakePicture a partir desse botão (uma vez que o seletor foi apresentado modalmente), os métodos delegados dispararam como deveriam. Não sei se o que eu queria é alcançável - pegar a imagem sem ter que pressionar esse botão automaticamente - mas, se for, provavelmente terá que ser feito enviando o TakePicture em algum momento depois que eu estava tentando usá -lo.

-(void) imagemethod: (id) remetente {imagePickerController = [[uiImagePickerController aloc] init]; ImagePickerController.sourcetype = uiImagePickerControllersourCetyPephotolibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top