gpt4 book ai didi

uitableview - 可能到 "reuse"AVPlayerLayer?从 superview 中删除单元重用会影响我的性能

转载 作者:行者123 更新时间:2023-12-04 18:05:37 24 4
gpt4 key购买 nike

我创建了一个真正简单的播放器类,并将其添加为自定义 uitableviewcell 的属性。我对滚动感到相当满意,但认为它可以做得更好。我有一个“清理”方法,我从播放器类中调用该方法来准备要重复使用的播放器。

-(void)URLFromWeb:(NSURL*)URL{


[self cleanPlayer];



AVAsset* avAsset = [AVAsset assetWithURL:URL];
AVPlayerItem *playerItem =[[AVPlayerItem alloc]initWithAsset:avAsset];

if (!self.player) {

self.player = [AVPlayer playerWithPlayerItem:playerItem];
[self.player setActionAtItemEnd:AVPlayerActionAtItemEndNone];

}

if (!self.avPlayerLayer) {


self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.avPlayerView = [[UIView alloc] initWithFrame:CGRectZero];
[self.avPlayerView.layer addSublayer:self.avPlayerLayer];

[self addSubview:self.avPlayerView];

[self.avPlayerLayer setFrame:CGRectMake(0, 0, 320, 320)];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerPlayedToEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
}

[self.avPlayerView removeFromSuperview];
[self addSubview:self.avPlayerView];

}

这是“cleanPlayer”的代码

    -(void)cleanPlayer{

[self.avPlayerView removeFromSuperview];

self.avPlayerView = nil;
self.avPlayerLayer = nil;
self.player = nil;


}

如果我从 cleanPlayer 方法中删除 [self.avPlayerView removeFromSuperview] 行,滚动是惊人的,但是在滚动相当多次后,单元格停止播放视频并开始显示错误的视频在细胞中。每次创建单元格时,重新添加代码都会导致轻微的“打嗝”,这有点烦人。任何对正在发生的事情的见解将不胜感激。哦,我已经使用了探查器,但在确定原因方面没有发现任何有用的东西。提前致谢!

最佳答案

我认为您不应该每次都清除您的播放器及其图层。

您可以在 UITableViewCell.awakeFromNib() 中实例化播放器及其图层,然后在需要时调用 AVPlayer.replaceCurrentItemWithPlayerItem(newItem)

例如,您可以在 UITableView.cellForRowAtIndexPath(indexPath) 中执行此操作。您还可以在 UITableViewCell.prepareForReuse()

中添加一个 AVPlayer.replaceCurrentItemWithPlayerItem(nil)

这似乎有点棘手,但没有必要在这里删除任何东西;)

希望这会有所帮助!

关于uitableview - 可能到 "reuse"AVPlayerLayer?从 superview 中删除单元重用会影响我的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27424779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com