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 に上げます。2 番目の値 0.0 は、レイヤーを再び透明にします。これは、残りの時間 (0.4 - 0.12 = 0.28 秒) を占めます。

于 2012-08-25T06:25:38.060 に答える