で使用するためのかなり単純な CoreAnimation を作成しようとしていますAVComposition
。私の目標はCALayer
、さまざまなサブレイヤーを介して、タイトルをフェードインおよびフェードアウトし、次に画像をフェードインおよびフェードアウトする を作成することです。基本的にスライドショーです。これは、 を使用して .mov にエクスポートされていAVAssetWriter
ます。
WWDC 2011 AVEditDemo の助けを借りて、タイトルと画像を表示することができました。問題は、それらがすべて同時に画面に表示されることです。
各レイヤーを不透明度 0.0 で作成しました。CABasicAnimation
次に、次のコードを使用して、それらを 0.0 から 1.0 にフェードする を追加しました。
CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimation.additive = NO;
fadeInAnimation.removedOnCompletion = YES;
fadeInAnimation.beginTime = 1.0;
fadeInAnimation.duration = 1.0;
fadeInAnimation.fillMode = kCAFillModeForwards;
[titleLayer addAnimation:fadeInAnimation forKey:nil];
問題は「beginTime」プロパティにあるようです。「1.0」は遅延を意味するため、アニメーションの開始から 1 秒後に開始されます。ただし、すぐに画面に表示されます。フェードアウトのアニメーション
このコードの逆のフェード アウトでは、単純に fromValue を 1.0 に、toValue を 0.0 に変更します。開始時間が 4.0 で、完全に機能します。
を作成するために以下を使用していますanimatedTitleLayer
。
CATextLayer *titleLayer = [CATextLayer layer];
titleLayer.string =self.album.title;
titleLayer.font = @"Helvetica";
titleLayer.fontSize = videoSize.height / 6;
titleLayer.alignmentMode = kCAAlignmentCenter;
titleLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height / 6);
titleLayer.foregroundColor = [[UIColor redColor]CGColor];
titleLayer.opacity = 0.0;
イメージ フェードイン アニメーションの beginTime は 5 秒間隔です。タイトルのように、フェード アウト アニメーションは正常に機能します。
どんな助けでも大歓迎です!
乾杯!
編集
回答はすべて役に立ちましたが、最終的に、CALayer
. フェードアウト アニメーションは、最後に追加されたものであったため、機能していました。
次に、CAAnimationGroup を試しましたが、同じキー値パスを変更していたため、これは機能しませんでした。
CAKeyframeAnimation
だから、これにはaが最適だと気づきました。私だけがそれにも苦労しています!コードは正常にフェードインしていますが、フェードアウトしていません。さまざまなfillModeを試したり、期間を変更したりしましたが、うまくいきません!!
これが私のコードです:
CAKeyframeAnimation *fadeInAndOut = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
fadeInAndOut.duration = 5.0;
fadeInAndOut.autoreverses = NO;
fadeInAndOut.keyTimes = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:4.0],
[NSNumber numberWithFloat:5.0], nil];
fadeInAndOut.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:0.0], nil];
fadeInAndOut.beginTime = 1.0;
fadeInAndOut.removedOnCompletion = NO;
fadeInAndOut.fillMode = kCAFillModeBoth;
[titleLayer addAnimation:fadeInAndOut forKey:nil];