相机拍摄时闪光屏白色?

Roh*_*han 6 animation camera image-capture ios

我想在拍摄相机时立即闪烁(然后淡出)屏幕,以便向用户提供已拍摄照片的指示(除了听觉线索之外).

这样的动画会放在哪里?另外,如何实现我可以控制淡出的持续时间?

注意:我为我的特定相机选择器创建了一个自定义叠加层.

任何表明照片被拍摄的东西都是我要找的东西.

pas*_*aya 9

我不知道你将动画放在哪里,因为我不知道你是如何捕获图片的(也许你可以发布代码),但这里是用于将屏幕闪烁白色的动画代码:

//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"];
}
Run Code Online (Sandbox Code Playgroud)

您还询问了如何控制淡出持续时间.您可以通过调整animationTimes数组中的值来完成此操作.如果你不熟悉CAKeyframeAnimations工作方式,那么这里就快点了.动画的总持续时间由opacityAnimation.duration = 0.4.这使得动画长达0.4秒.现在做什么了animationTimes.数组中的每个值都是介于0.0和1.0之间的数字,并且对应于'animationValues'数组中的元素.times数组中的值将相应关键帧值的持续时间定义为动画总持续时间的一部分.

例如,在上面的动画中,时间数组包含值0.3和1.0,它们对应于值0.8和0.0.总持续时间为0.4,因此这意味着最初的不透明度为0.0的whiteScreen视图占用

0.4 * 0.3 = 0.12 seconds.
Run Code Online (Sandbox Code Playgroud)

将不透明度提高到0.8.第二个值0.0使图层再次变为透明.这占用了剩余的时间(0.4-0.12 = 0.28秒).