私はAVPlayerLayerの境界で追加アニメーションを実行しようとしています。単にadditiveをYESに設定すると、アニメーションが壊れます。幅と高さが異なるアニメーションパラメータでアニメーション化できるように、私はそれを追加する必要があります。キーパスbounds.size.widthとbounds.size.heightをアニメートするとどちらも機能しません。AVPlayerLayer境界で追加アニメーションを使用するにはどうすればよいですか?
私は他のCALayerクラスを下のコードでうまく動かすことができるので、AVPlayerLayerにバグがあるかどうか疑問に思います。ここで
コードです:赤のエリアは、ビデオの再生でなければなりません
:
AVPlayerLayer *vl;
// ...
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSURL *path = [[NSBundle mainBundle] URLForResource:@"vid" withExtension:@"mp4"]];
AVPlayer *player = [AVPlayer playerWithURL: path];
vl = [AVPlayerLayer playerLayerWithPlayer:player];
vl.videoGravity = AVLayerVideoGravityResize;
// vl = [CALayer layer]; // a normal calayer animates properly
vl.backgroundColor = [NSColor redColor].CGColor;
vl.frame = CGRectMake(200,100,150,100);
[_window.contentView.layer addSublayer:vl];
}
- (IBAction)animate:(id)sender {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"];
animation.fromValue = [NSValue valueWithRect:CGRectMake(0,0,0, 0)];
animation.toValue = [NSValue valueWithRect:CGRectMake(0,0,240, 60)];
animation.duration = 4;
animation.additive = YES;
[vl addAnimation:animation forKey:nil];
}
これは、次のようになります。
あなたは私がここで作成したサンプルプロジェクトをチェックアウトすることができます: https://www.dropbox.com/s/jxuh69wiqdwnuc6/PlayerLayer%20size%20Animation.zip?dl=1
コードをフレーム内ではなく、アニメーションの境界であるという問題である。元の質問のコード例は、通常のCALayersのために働くので、AVPlayerLayersに特有のクールなようです。 – Hooper
元の質問のコード例は境界もアニメーション化しています!あなたはCALayerのフレームをアニメートできないからです! – Stoull