私はこれに似たものを持っています:
ご覧のとおり、テーブルビューがあり、各テーブルビューセルにコレクションビューがあります。コレクションビューは水平(カルーセルを複製するため)なので、ユーザーは画像やビデオのギャラリーをスワイプできます。これを描く別の方法は次のとおりです。
コントローラー->テーブルビュー->テーブルビューセル->コレクションビュー(カルーセル)->コレクションビューセル(カルーセル画像/ビデオ)
私が達成しようとしているのは、ユーザーがテーブルビューをスクロールすると、カルーセル内のビデオが自動的に再生されるようにすることです。もちろん、それを実現するには、次のことを行う必要があります。
- コレクションビューが画面に表示されているかどうかを確認します。
- 表示されているコレクションビューのセルがビデオであるかどうかを確認します(コレクションビューのすべてのセルがビデオではなく、一部は画像です)。
- 2つの別々のテーブルビューセルにある2つのビデオが同時に再生されていないことを確認します。最初に表示されるテーブルビューセルのみに再生ビデオが必要です。
ただし、これは言うより簡単です。私がしている、以前に尋ねた私は今それを行う方法を知っているので、ビューが画面上に表示されているかどうかを判断する方法。
私の質問は、コードをどのように構造化すべきかを中心に展開しています。
私のコントローラークラスには、次のものがあります。
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
isCollectionViewVisible()
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if (!decelerate) {
isCollectionViewVisible()
}
}
func isCollectionViewVisible() {
for visibleCell in self.tableView.visibleCells {
guard let cell = visibleCell as? MyTableViewCell else {
continue
}
if let myCollectionView = cell.collectionView {
let visibleRect = self.tableView.bounds
let myCollectionViewRect = myCollectionView.convert(myCollectionView.bounds, to: tableView)
if visibleRect.contains(myCollectionViewRect) {
// Collection view is visible
} else {
// Collection view is hidden, either partially or fully
}
}
}
}
そのため、ユーザーがスクロールすると、テーブルビューのセルのコレクションビューが完全に表示されているかどうかが確認されます。ここからどうすればいいですか?ビデオを表示する最初のコレクションビューに、ビデオを再生するように伝えるにはどうすればよいですか(ビデオコードが完了していると想定しています)。
次に、このコードをカプセル化する最良の方法は何でしょうか(上記を含む) isCollectionViewVisible()
ですか関数、すべてのコントローラーでコードを繰り返す必要がないようにしますか?)
本当にありがとう!
コードを共有してください。あなたを助けることは素晴らしいことです。ありがとう
—
Ahtazaz
これが今のところ私のコードです。
—
user023425