13

リンクがクリックされるたびに新しいビューにロードする AVPlayer があります。

-(void)createAndConfigurePlayerWithURL:(NSURL *)movieURL sourceType:(MPMovieSourceType)sourceType {
self.playerItem = [AVPlayerItem playerItemWithURL:movieURL];
customControlOverlay = [[AFDetailViewController alloc] initWithNibName:@"AFMovieScrubControl" bundle:nil];
backgroundWindow = [[UIApplication sharedApplication] keyWindow];
[customControlOverlay.view setFrame:backgroundWindow.frame];
[backgroundWindow addSubview:customControlOverlay.view];

playerLayer = [AVPlayerLayer playerLayerWithPlayer:[AVPlayer playerWithPlayerItem:playerItem]];
[playerLayer.player play];
playerLayer.frame = customControlOverlay.view.frame;
[customControlOverlay.view.layer addSublayer:playerLayer]; 
}

上記のコードは、AVPlayer をアプリに追加し、正常に動作します。ビューを削除し、AVplayer の再生を停止する必要がある customControlOverlay nib にトグルがあります。

-(IBAction)toggleQuality:(id)sender {
if (qualityToggle.selectedSegmentIndex == 0) {
    NSLog(@"HD");
    [playerLayer.player pause];
    [self.view removeFromSuperview];

} else if (qualityToggle.selectedSegmentIndex == 1) {
    NSLog(@"SD");
}
}

ビューは正しく削除されますが、プレーヤーは引き続きバックグラウンドで再生されます。少しテストした後、プレーヤーは toggleQuality メソッドのどのコードにも応答しませんが、チェックがログに記録されているため、そこにある文字列が表示されます。

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

27

古い質問だと思いますが、いつか誰かの役に立つかもしれません。

playerLayersublayerは としてではなく として追加されているため、subview(スーパービューではなく) そのスーパーレイヤーから単純に削除する必要があり、プレーヤーは次のように nil に設定する必要があります。

/* not sure if the pause/remove order would matter */
[playerLayer.player pause];
// uncomment if the player not needed anymore
// playerLayer.player = nil;
[playerLayer removeFromSuperlayer];
于 2014-10-20T15:12:07.683 に答える