我想在拍摄相机时立即闪烁(然后淡出)屏幕,以便向用户显示已拍摄照片的指示(除了听觉线索之外)。
这样的动画会放在哪里?另外,如何实现我可以控制淡出的持续时间?
注意:我为特定的相机选择器创建了自定义叠加层。
任何表明照片被拍摄的东西都是我要找的。 p>
答案 0 :(得分: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数组中的值将相应关键帧值的持续时间定义为动画总持续时间的一部分。例如,在上述动画中,时间数组包含值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秒)。