6

我想在相机捕获的那一刻闪烁(然后淡出)屏幕,以向用户指示已拍摄照片(除了听觉线索)。

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

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

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

4

1 回答 1

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"];
}

您还询问了如何控制淡出持续时间。您可以通过调整animationTimes数组中的值来做到这一点。如果您不熟悉如何CAKeyframeAnimations工作,那么这里有一个简短的简报。动画的总持续时间由opacityAnimation.duration = 0.4. 这使动画长度为 0.4 秒。现在开始做什么animationTimes。数组中的每个值都是一个介于 0.0 和 1.0 之间的数字,并且对应于“animationValues”数组中的一个元素。times 数组中的值将相应关键帧值的持续时间定义为动画总持续时间的一部分。

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

0.4 * 0.3 = 0.12 seconds.

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

于 2012-08-25T06:25:38.060 回答