【问题标题】:Pause other instances of AVPlayer when playButton is pushed按下 playButton 时暂停 AVPlayer 的其他实例
【发布时间】:2016-05-10 08:33:02
【问题描述】:

我有表格视图,其中包含从 Parse 加载视频对象的单元格。 加载视频时,播放按钮会出现在视频的静止图像表示上。播放按钮是故事板 UIButton 的出口。

在我的 FeedCell.m 中:

- (IBAction)playButtonTapped:(id)sender {
[self.player play];

if (self.player.rate != 0 && (self.player.error == nil)) {
    // player is playing
    self.playButton.hidden = YES;
}

self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

[[NSNotificationCenter defaultCenter] addObserver:self
                                        selector: @selector (playerItemDidReachEnd:)
                                            name:AVPlayerItemDidPlayToEndTimeNotification
                                            object:[self.player currentItem]];
}

- (void)playerItemDidReachEnd:(NSNotification *)notification {
self.playButton.hidden = NO;
[self.playerItem seekToTime:kCMTimeZero];
[self.player pause];
}

我想添加此按钮的功能,以便在点击 playButton 时播放 AVPlayerItem 并暂停所有其他 AVPlayer 实例。

我可以通过设置另一个 NSNotification 来做到这一点吗?

【问题讨论】:

    标签: ios objective-c uibutton storyboard avplayer


    【解决方案1】:

    NSNotification 不是答案,因为它向所有添加为观察者的接收者发送广播消息,在这种情况下,每个单元格都包含 AVPlayer。

    但是有一个问题:当你向下滚动 UITableView 时,一些 UITableViewCell 会离开屏幕,即使它们被添加为观察者,它们也不会收到任何 NSNotification。

    因此,您可以将所有 AVPlayer 添加到 NSMutableArray 中,当您想要停止所有视频时,您可以循环数组并手动调用它们的 stop 方法。 然后将它们从阵列中移除。 请记住,将 AVPlayer 添加到数组会导致它们的引用计数永远不会达到 0,因此在数组处于活动状态时不会释放它们。 所以将 NSMutableArray 放在包含 UITableView 的同一个控制器上,这样当它被释放时,数组也被释放,然后所有 AVPlayer 都被释放

    【讨论】:

    • 有没有办法只影响滚动到视野之外的单元格?
    • 您可以改用AVQueuePlayer。这将让您预加载资产,然后只要按下播放按钮,它将停止正在播放的资产并转到新的资产
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2011-11-12
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    相关资源
    最近更新 更多