câmera de visão sobreposição - apenas para visualização?

votos
15

Tenho notado que no OS 3.1 você pode adicionar uma vista de sobreposição para o selecionador de imagem com

cameraOverlayView

No entanto, eu também tenho notado que a adição de uma visão através deste método também exibe a vista durante todo o tempo do UIImagePicker é exibido, quando eu só quero mostrar isso durante a fase de pré-visualização.

Existe uma maneira de fazer isso só acontecerá durante a visualização? Eu não quero que ele esteja lá durante a animação obturador aberto, ou a tela que pergunta se você deseja utilizar a imagem ou retomar.

Publicado 17/01/2010 em 18:21
fonte usuário
Em outras línguas...                            


4 respostas

votos
18

Eu só queria mostrar-se outra possibilidade, sem mexer subexibição. Há notificações do sistema para as mudanças na CameraPicker. Eles não estão documentadas (como a estrutura subexibição). Então, eles também estão sujeitos a alterações. MAS você pegá-los.

Você pode se registrar para eles usando nenhum nome:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(notificationReceived:) name: nil object: nil];

Recebemos algumas notificações (selfexplaining) interessantes aqui:

PLCameraControllerPreviewStartedNotification
PLCameraViewIrisAnimationWillBeginNotification
PLCameraViewIrisAnimationDidEndNotification

Recorder_DidStartPreviewing
Recorder_SourceStarted
Recorder_WillCapturePhoto
Recorder_DidCapturePhoto
Recorder_PhotoStillImageSampleBufferReady
Recorder_DidStopPreviewing

_UIImagePickerControllerUserDidCaptureItem // Photo was taken, preview is shown
_UIImagePickerControllerUserDidRejectItem  // Repeat was pressed, camera is shown again 

Você poderia usá-los, para acionar os seus overlayviews estado oculto ou qualquer outra coisa.

Respondeu 17/01/2012 em 17:50
fonte usuário

votos
17

Eu descobri uma maneira de você para alcançar o resultado desejado, embora é um pouco ... não é tão padrão. :)

A idéia é reorganizar um pouco a ordem dos pontos de vista internos na estrutura de UIImagePickerControllerusos.

OK, por isso criamos um UIImagePickerControllerobjeto, inicialize-lo e adicionar uma vista de sobreposição para ele. Posso ter sua atenção, por favor! O UIViewobjeto ( UIImageViewno código exemplo) está escondido desde o início. Não perca isso. Por fim, apresentamos o controlador de imagem selecionador como controlador de vista modal. Este código deve estar em algum lugar na sua applicationDidFinishLaunching:, viewWillAppear:ou semelhante adequada prestes a lançar métodos.

UIImagePickerController *anImagePickerController = [UIImagePickerController new];
anImagePickerController.delegate = self;
anImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

UIImageView *anImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Watermark.png"]];
anImageView.frame = CGRectMake(0, 1, anImageView.image.size.width, anImageView.image.size.height);
anImageView.hidden = YES;
anImagePickerController.cameraOverlayView = anImageView;

[viewController presentModalViewController:anImagePickerController animated:NO];
[anImagePickerController release];

[NSTimer scheduledTimerWithTimeInterval:0.1
                                 target:self
                               selector:@selector(timerFireMethod:)
                               userInfo:anImageView
                                repeats:YES];
[anImageView release];

Antes da vista de sobreposição ( anImageView) é lançado um NSTimeré criado, inicializado com anImageView( NSTimer userInfopropriedade) e programado imediatamente. Aqui está o método que chama:

- (void)timerFireMethod:(NSTimer*)theTimer {
    UIView *cameraOverlayView = (UIView *)theTimer.userInfo;
    UIView *previewView = cameraOverlayView.superview.superview;

    if (previewView != nil) {
        [cameraOverlayView removeFromSuperview];
        [previewView insertSubview:cameraOverlayView atIndex:1];

        cameraOverlayView.hidden = NO;

        [theTimer invalidate];
    }
}

Toda NSTimercoisa é adicionado ao fluxo para garantir que o trabalho reordenação torno vai acontecer exatamente quando o UIImagePickerControllerserá totalmente pronto para isso.

É isso. Ele funciona, não é padrão, é áspera e rápida. Mais uma vez se sentir livre para otimizar e torná-lo 'mais certo' (oh por favor, meu objetivo era mostrar o caminho).

Respondeu 23/01/2010 em 13:56
fonte usuário

votos
6

Na verdade, eu estava tentando fazer a mesma coisa e me deparei com uma muito mais simples de fazê-lo através deste post: http://www.alexcurylo.com/blog/2009/06/18/uiimagepickercontroller-in-3-0 /

Desde o UIImagePickerController pode chamar um UINavigatorControllerDelegate, o método abaixo é chamado antes que o selecionador de imagem é exibida.

Aqui está o código importante:

 - (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
   if (!viewController)
   return;

   UIView* controllerViewHolder = viewController.view;
   UIView* controllerCameraView = [[controllerViewHolder subviews] objectAtIndex:0];
   UIView* controllerPreview = [[controllerCameraView subviews] objectAtIndex:0];
   [controllerCameraView insertSubview:self.overlayView aboveSubview:controllerPreview];
}

Espero que ajude.

Respondeu 28/02/2010 em 20:04
fonte usuário

votos
-2

Quando você constrói-se o seletor de adicionar a sobreposição à picker (picker.cameraOverlayView = myView).

A sobreposição não vai estar na foto tirada. É apenas, como ele diz, uma vista de sobreposição.

Você pode remover a vista de sobreposição antes de tirar uma foto ( takePicturemétodo) e adicione a vista novamente emimagePickerController:didFinishPickingMediaWithInfo:

Respondeu 17/01/2010 em 18:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more