2012-07-31 8 views
6

Me gustaría destellar (y luego fundir) la pantalla justo en el momento de la captura de la cámara para dar al usuario la indicación de que se ha tomado una foto (además de solo una pista auditiva).¿Pantalla flash blanca en el momento de la captura de la cámara?

¿Dónde se colocaría dicha animación? Además, ¿cómo se implementaría de manera que pueda controlar la duración del fadeout?

Nota: He creado una superposición personalizada para mi selector de cámara en particular.

Cualquier cosa que indique que se ha tomado una foto es lo que estoy buscando.

Respuesta

9

No estoy seguro de dónde colocaría la animación porque no sé exactamente cómo capturar la imagen (tal vez podría publicar el código), pero aquí está el código para una animación para mostrar la pantalla en blanco:

//Header (.h) file 
@property (nonatomic, strong) UIView *whiteScreen; 

//Implementation (.m) file 
@synthesize whiteScreen; 

- (void)viewDidLoad { 
    self.whiteScreen = [[UIView alloc] initWithFrame:self.view.frame]; 
    self.whiteScreen.layer.opacity = 0.0f; 
    self.whiteScreen.layer.backgroundColor = [[UIColor whiteColor] CGColor]; 
    [self.view addSubview:self.whiteScreen]; 
} 

-(void)flashScreen { 
    CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; 
    NSArray *animationValues = @[ @0.8f, @0.0f ]; 
    NSArray *animationTimes = @[ @0.3f, @1.0f ]; 
    id timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    NSArray *animationTimingFunctions = @[ timingFunction, timingFunction ]; 
    [opacityAnimation setValues:animationValues]; 
    [opacityAnimation setKeyTimes:animationTimes]; 
    [opacityAnimation setTimingFunctions:animationTimingFunctions]; 
    opacityAnimation.fillMode = kCAFillModeForwards; 
    opacityAnimation.removedOnCompletion = YES; 
    opacityAnimation.duration = 0.4; 

    [self.whiteScreen.layer addAnimation:opacityAnimation forKey:@"animation"]; 
} 

También ha preguntado cómo controlar la duración del fadeout. Puede hacer esto ajustando los valores en la matriz animationTimes. Si no está familiarizado con el funcionamiento de CAKeyframeAnimations, aquí está el resumen más rápido. La duración total de la animación está controlada por el opacityAnimation.duration = 0.4. Esto hace que la animación tenga 0,4 segundos de duración. Ahora en lo que animationTimes hace. Cada valor en la matriz es un número entre 0.0 y 1.0 y corresponde a un elemento en la matriz 'animationValues'. El valor en la matriz de tiempos define la duración del valor del fotograma clave correspondiente como una fracción de la duración total de la animación.

Por ejemplo, en la animación anterior, la matriz de tiempos contiene los valores 0,3 y 1,0, que corresponden a los valores 0,8 y 0,0. La duración total es de 0,4, por lo que significa que la vista whiteScreen que tiene su opacidad inicialmente a 0,0, toma

0.4 * 0.3 = 0.12 seconds. 

para aumentar la opacidad a 0,8. El segundo valor, 0.0, hace que la capa vuelva a ser transparente. Esto ocupa el resto del tiempo (0.4 - 0.12 = 0.28 segundos).

Cuestiones relacionadas