我有一个CollectionView
,它的VideoPlayer
中有一个DataTemplate
元素,取自Xamarin Forms sample projects。在iOS上,渲染的视频播放器使用AVPlayer
播放视频。
我还有一个按钮,当按下该按钮时,会将更多项目添加到ItemSource
的{{1}}中。
如果我播放第一个,例如,三个项目,并在随机帧/时间将它们暂停,然后按添加更多项目按钮,则iPhone上这三个CollectionView
实例上的冻结图像帧会在某些情况下被随机播放/切换奇怪的命令。
更详细地:
如果我按下添加其他项目,如果AVPlayer
的第一项有一些动画片动画已暂停,第二项有一些体育比赛视频已暂停,第三项有一些森林图像视频已暂停,按钮,并将一些新项目添加到CollectionView
的{{1}}中,我看到体育游戏视频帧移至第一项的ItemSource
实例,森林图像视频帧移至第二项项的CollectionView
实例,动画框架将移动到第三项的AVPlayer
实例。需要说明的是:项目本身保持在正确的位置,只有AVPlayer中的视频帧被切换。
在“改组”这些项目之后,如果我取消暂停第一个项目,它将播放其原始动画动画片视频,第二和第三项也是如此。据我了解,唯一的问题是AVPlayer
的缓存/单元重用机制中的某处,AVPlayer
的缓存帧在向{{1 }}。
此问题仅在CollectionView
中发生。任何其他元素,不会重现此行为。我曾尝试使用ffimageloading的AVPlayer
,简单标签和其他元素,但只有CollectionView
呈现的,暂停的帧图像会被打乱。
我意识到这个问题可能有一些深层次的根源,在Xamarin Forms级别上无法解决,而只是想在这里试试运气。
我的CollectionView代码非常基本:
AVPlayer
当将CahcedImage
元素替换为任何其他元素(例如AVPlayer's
)时,相同的精确代码会发挥应有的作用。
另一件事是,当在<CollectionView ItemsSource="{Binding ScrollArticles}"
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All"
RemainingItemsThreshold="5"
RemainingItemsThresholdReachedCommand="{Binding LoadMoreItems}"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
ItemsLayout="VerticalList"
x:Name="CategoryItemsListView"
VerticalScrollBarVisibility="Always"
Scrolled="CategoryItemsListView_OnScrolled"
>
<CollectionView.ItemTemplate>
<DataTemplate>
<elements:VideoPlayer Margin="0,0,0,15" Source={Binding video_url}>
</elements:VideoPlayer>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
(使用VideoPlayer
)而不是Image
内实现时,相同的精确VideoPlayer
代码不会执行此操作。但是不幸的是,ListView
缺少很多功能,例如在滚动时确定最中心的项目等。