Анимация не начинается при использовании AVSynchronizedLayer - PullRequest
1 голос
/ 18 декабря 2011

Я настроил проект в качестве теста, используя AVSyncronizedLayer для перемещения красной линии (CALayer) по экрану во время воспроизведения фильма.

При этом я сослался на ответ , данный здесь , и включил это решение, но анимация не запускается, когда видео делает.

Если у кого-то есть идеи, где я ошибаюсь, это было бы очень полезно. Код:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

//create the red line sublayer
redLine = [CALayer layer];
redLine.backgroundColor = [UIColor redColor].CGColor;
redLine.frame = CGRectMake(engravingControl.frame.origin.x, engravingControl.center.y - (engravingControl.frame.size.height/2), 3, engravingControl.frame.size.height);


//create the AVplayer object
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"IMG_1306" withExtension:@"mov"];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];

AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = CGRectMake(0, 0,400,300);
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

//add the subViews
[self.view.layer addSublayer:playerLayer];
[self.view.layer addSublayer:redLine];

CABasicAnimation *redLineMove;  
redLineMove=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
redLineMove.duration=10;
redLineMove.fromValue=[NSNumber numberWithFloat:engravingControl.frame.origin.x];
redLineMove.toValue=[NSNumber numberWithFloat:engravingControl.frame.size.width + engravingControl.frame.origin.x];
redLineMove.beginTime = AVCoreAnimationBeginTimeAtZero;


//create the sync layer
AVSynchronizedLayer *syncLayer = [AVSynchronizedLayer     synchronizedLayerWithPlayerItem:playerItem];
[syncLayer addSublayer:redLine];
[redLine addAnimation:redLineMove forKey:@"redLineMove"];

[self.view.layer addSublayer:syncLayer];

[player play];

}

1 Ответ

4 голосов
/ 19 декабря 2011

Я нашел решение для этого.Если у вас нет следующей строки кода:

animation.removedOnCompletion = NO;

Тогда анимация никогда не запускается (я предполагаю, что она удаляется CA до начала воспроизведения фильма).

Добавьте этои работает так, как вы ожидаете.

...