Phát video trong băng chuyền khi nhìn thấy tế bào


8

Tôi có một cái gì đó tương tự như thế này:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, tôi có chế độ xem bảng và trong mỗi ô xem bảng, tôi có chế độ xem bộ sưu tập. Chế độ xem bộ sưu tập nằm ngang (để sao chép băng chuyền) để người dùng có thể vuốt qua bộ sưu tập hình ảnh và video. Đây là một cách khác để hình dung nó:

Bộ điều khiển -> Chế độ xem bảng -> Các ô xem bảng -> Chế độ xem bộ sưu tập (băng chuyền) -> Các ô xem chế độ bộ sưu tập (các hình ảnh / video băng chuyền)

Những gì tôi đang cố gắng đạt được là để video trong băng chuyền tự động phát khi người dùng cuộn qua chế độ xem bảng. Tất nhiên, để điều đó xảy ra, những điều sau đây cần phải được thực hiện:

  1. Kiểm tra xem chế độ xem bộ sưu tập có hiển thị trên màn hình không.
  2. Kiểm tra xem ô xem bộ sưu tập có thể nhìn thấy có phải là video không (không phải tất cả các ô trong chế độ xem bộ sưu tập đều là video, một số là hình ảnh).
  3. Đảm bảo rằng hai video trong hai ô xem bảng riêng biệt không phát cùng lúc. Chỉ có ô xem bảng hiển thị đầu tiên mới có video phát.

Điều này, tuy nhiên, nói dễ hơn làm. Trước đây tôi đã hỏi làm thế nào để xác định xem một màn hình có hiển thị trên màn hình hay không, vì vậy tôi biết làm thế nào để làm điều đó bây giờ.

Câu hỏi của tôi xoay quanh cách tôi nên cấu trúc mã của mình.

Trong lớp trình điều khiển của tôi, tôi có các mục sau:

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
            }
        }
    }
}

Vì vậy, bây giờ, khi người dùng cuộn, nó sẽ kiểm tra xem chế độ xem bộ sưu tập của ô xem bảng có hiển thị đầy đủ hay không . Làm thế nào tôi nên tiến hành từ đây? Làm cách nào để tôi biết chế độ xem bộ sưu tập đầu tiên với video hiển thị để phát video (giả sử rằng tôi đã thực hiện mã video)?

Thứ hai, cách tốt nhất để đóng gói mã này là gì (bao gồm cả isCollectionViewVisible()chức năng trên để tôi không phải lặp lại mã trong tất cả các bộ điều khiển của mình?

Cám ơn rất nhiều!


Hãy chia sẻ mã của bạn. Nó sẽ là tuyệt vời để giúp bạn. Cảm ơn
Ahtazaz

Đó là mã của tôi cho đến nay.
dùng023425

Câu trả lời:


3

Đây là một công việc xung quanh.

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

 let cell = tableView.dequeueReusableCell(withIdentifier identifier: “cellIdentifier” for indexPath: indexPath) as! YourTableViewCell


 if cell == tableView.visibleCells.first { // the first element is guaranteed to be fully visible.

        guard let collectionView = cell.collectionView else { return } // to avoid crash when scrolling fast.

           if let videoCell = collectionView.visibleCells.first(where : { cell in cell.hasVideo() }) {
         // however you use to tell if cell has image or video.
           videoCell.play()
          }

       }


    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.