我想在相机拍摄时立即闪烁(然后淡出)屏幕,向用户指示已经拍摄了照片(除了听觉线索)。
这样的动画会放在哪里?此外,如何实现它,以便我可以控制淡出的持续时间?
注意:我已经为我的特定相机选取器创建了一个自定义覆盖。
任何表明照片已被拍摄的东西都是我想要的。
我不确定你会把动画放在哪里,因为我不知道你是如何准确地捕捉图片的(也许你可以发布代码),但下面是动画使屏幕变白的代码:
//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"数组中的一个元素。时间数组中的值将相应关键帧值的持续时间定义为动画总持续时间的一小部分
例如,在上面的动画中,时间数组包含值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秒)。