カメラがキャプチャされた瞬間に画面をフラッシュ(およびフェードアウト)して、写真が撮影されたことをユーザーに示したいと思います(単なる聴覚的手がかりに加えて)。
そのようなアニメーションはどこに配置されますか? また、フェードアウトの持続時間を制御できるようにするには、どのように実装しますか?
注: 特定のカメラ ピッカー用にカスタム オーバーレイを作成しました。
写真が撮影されたことを示すものはすべて、私が探しているものです。
カメラがキャプチャされた瞬間に画面をフラッシュ(およびフェードアウト)して、写真が撮影されたことをユーザーに示したいと思います(単なる聴覚的手がかりに加えて)。
そのようなアニメーションはどこに配置されますか? また、フェードアウトの持続時間を制御できるようにするには、どのように実装しますか?
注: 特定のカメラ ピッカー用にカスタム オーバーレイを作成しました。
写真が撮影されたことを示すものはすべて、私が探しているものです。
画像を正確にキャプチャする方法がわからないため(コードを投稿できるかもしれません)、アニメーションをどこに配置するかはわかりませんが、画面を白く点滅させるアニメーションのコードは次のとおりです。
//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 に上げます。2 番目の値 0.0 は、レイヤーを再び透明にします。これは、残りの時間 (0.4 - 0.12 = 0.28 秒) を占めます。