0

UICollectionView에 대한 가로 흐름 레이아웃이 있습니다. 각 셀은 전체 화면을 차지하고 페이징은 켜져 있습니다. 각 셀에는 MPMoviePlayerController도 포함되어 있으며 문제없이 비디오를 재생할 수 있습니다. 그러나 왼쪽 또는 오른쪽으로 스크롤하면 현재 표시된 동영상 (이 시점에서 일시 중지됨)이 사라지고 플레이어보기가 검은 색으로 변합니다. 그런 다음 재생을 시작하면 비디오가 다시 나타납니다. 어떻게 든 비디오 visibile,하지만 성공하지 않고 유지하려면 scrollview 대리자 메서드를 prepareToPlay 추가했습니다.UICollectionViewCell에서 스크롤 할 때 MPMoviePlayerController가 공백이됩니다.

답변

3

한 번에 MPMoviePlayerController의 인스턴스를 하나만 사용할 수 있습니다. 이는 MPMoviePlayerController의 제한 사항입니다.

경우에 따라 스크롤을 시작할 때 적어도 2 개의 MPMoviePlayerController을 초기화하고 비디오를 재생해야합니다. MPMoviePlayerController으로는 불가능합니다.

동일한 화면에서 동시에 여러 비디오를 재생하려면 AVFoundation을 사용하는 것이 좋습니다. 그리고 AVFoundation을 기반으로 한 오픈 소스 비디오 플레이어가 있습니다. 그 중 하나는 AVFoundation 플레이어를 처음부터 만드는 것보다 쉬울 것입니다.

+2

나는 AVPlayer로 전환했으며 현재 예상대로 작동 중입니다. 많은 감사합니다! – Shocks

1

컬렉션보기를 스크롤하면 보이지 않는 셀이 컬렉션보기 "재사용 가능한 풀"메커니즘에 의해 다시 사용되므로 기존 무비 플레이어가 제거되고 상태가 재설정됩니다. 셀보기가 다시 표시되면 풀에서 뷰를 가져오고 (풀이 비어 있으면 새 뷰가 만들어 짐) 뷰를 다시 구성해야합니다.

  • 간단한 솔루션을 : 당신이 그런 상황에서 할 수있는 일 (예를 들어 셀 인덱스 경로 좌표를 사용하여) 모든 단일 콜렉션 뷰 셀에 고유 한 식별자를 부여, 그래서 재활용되지 않습니다. 이 방법을 다시 생각해보십시오 : 많은 셀을 가지고 있다면 모든 새로운 셀이 처음부터 다시 만들어지기 때문에 메모리 문제가 발생할 수 있습니다. 그리고 영화 플레이어 컨트롤러는 무시할 수없는 메모리를 사용합니다.
  • 더 복잡한 해결책 : 모든 단일 영화 플레이어 상태 (재생 시간, 비디오 URL, 해당 매개 변수를 관찰하거나 알림을 듣음) 사전, 다시 셀 색인 경로로 색인화됩니다. 셀이 보이지 않게되면 무비 플레이어는 리셋되지만 재실행하면 무비 플레이어 상태를 올바른 위치로 재구성 할 수 있습니다. 분명히 작업이 즉시 이루어지지는 않습니다 (동영상 플레이어가 동영상 렌더링을 시작하는 데 시간이 걸립니다)하지만 앱에 메모리 사용량을 추가하지는 않습니다.
관련 문제