Detectar quando iris da câmera é aberto no iPhone

votos
4

Para uma sobreposição de câmera cutom eu preciso descobrir, quando a íris está aberta, porque a minha sobreposição passará pelas mostrado enquanto a íris está perto (e, em seguida, animar a abrir).

Alguma ideia ?

Publicado 15/10/2009 em 06:17
fonte usuário
Em outras línguas...                            


5 respostas

votos
3

Parece que PLCameraViewIrisAnimationDidEndNotification não é notificado em iOS5.

Eu não consigo descobrir o que é uma solução adequada quando a íris terminou de abertura, deve haver uma outra opção em vez de usar um segundo temporizador 3.

Confira aqui: https://devforums.apple.com/message/561008#561008

Respondeu 11/10/2011 em 16:37
fonte usuário

votos
3

Você pode ouvir a notificação PLCameraViewIrisAnimationDidEndNotification. Uma vez que este não está documentada oficialmente, você pode estar em violação da Apple TOS, mas acho que enquanto você escreve seu código para que ele seja defensiva contra a possibilidade de que o nome ou o contrato desta notificação pode mudar (para que no futuro você pode não obter o evento) você provavelmente vai ser ok. Em outras palavras, usar um timer ou outra técnica para garantir que a coisa que você quer fazer quando a íris está aberta definitivamente vai acontecer eventualmente, mesmo se você nunca começar a notificação ...

exemplo trivial sem a programação defensiva. (Claro, você pode registrar um interesse apenas para esta notificação específica, bem como, ver a documentação para o centro de notificação.)

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

- (void) notificationCallback:(NSNotification *) notification {
     if ([[notification name] isEqualToString:@"PLCameraViewIrisAnimationDidEndNotification"]) {
         NSLog(@"Iris open");
         // we don't need to listen any more
         [[NSNotificationCenter defaultCenter] removeObserver:self];
     }
}
Respondeu 04/11/2009 em 16:46
fonte usuário

votos
2

Eu tenho um ViewController (ALImagePickerController) que detém, inicializa e apresenta o UIImagePickerController como um controlador de vista criança (eu tenho um outro controlador de vista da criança para apresentar a imagem tirada que não é mostrado aqui) e eu apresentar (como um modal) a ALImagePickerController quando eu quer usar a câmera. Assim, durante este o viewDidAppear do ViewContoller eu adicionar uma animação para trazer a sobreposição câmera graciosamente como a animação do obturador desaparece.

@interface ALImagePickerController ()

@property (nonatomic) UIImagePickerController           *cameraController;
@property (nonatomic) CameraOverlayView                 *overlayView;
....

@end

@implementation ALImagePickerController

....


- (void)viewDidLoad {
    [super viewDidLoad];

    [UIApplication sharedApplication].statusBarHidden = YES;

    self.cameraController = [UIImagePickerController new];
    self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.cameraController.delegate = self;
    self.cameraController.allowsEditing = NO;
    self.cameraController.showsCameraControls = NO;
    ....

    self.overlayView = [CameraOverlayView new];
    ....
    self.overlayView.alpha = 0;
    self.cameraController.cameraOverlayView = self.overlayView;

    .... 

     // add as child view controller
    [self addChildViewController:self.cameraController];
    [self.view addSubview:self.cameraController.view];
    [self.cameraController didMoveToParentViewController:self];
}


- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [UIApplication sharedApplication].statusBarHidden = NO;
}


- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // smoothly bring in the overlay as the native camera shutter animation opens.
    [UIView animateWithDuration:0.2 delay:0.3 options:UIViewAnimationCurveEaseOut animations:^{
        self.overlayView.alpha = 1.f;
    } completion:nil];
}

....

@end
Respondeu 06/10/2012 em 15:11
fonte usuário

votos
0

A maneira que eu resolvi esse problema é que eu inicializar todos os elementos com a propriedade oculta definida para YES, em seguida, chamar a 3 segundos seletor adiada depois que eu chamar a câmera, onde eu definir todos os elementos para escondido = NO. Não é uma solução ideal, mas parece funcionar, e qualquer lag após a íris é aberto é insignificante.

Respondeu 08/04/2011 em 16:27
fonte usuário

votos
-1

Você já deve saber quando a câmera está pronta para tirar uma foto. Pelo menos da maneira que eu utilizar uma sobreposição de câmera personalizado, eu inicializar o vista com algo parecido self.sourceType = UIImagePickerControllerSourceTypeCamera;e outra configuração de costume, ea câmera está pronto (ou "íris está aberta") naquele ponto.

Em resumo, se alguém está usando uma sobreposição de câmera personalizado da maneira que eu estou acostumado a usá-lo, ninguém vai saber quando a íris está aberto porque ele está sob seu controle.

Respondeu 17/10/2009 em 04:18
fonte usuário

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