我的故事板中有一个UIImageView,在我的UICollectionViewController中有一个出口:

@IBOutlet var playButtonView: UIImageView!


情节提要不允许我在View Controller之外的任何地方制作插座,因为我已经在VCs画布之外制作了视图,因此可以动态放置它:

ios - 通过滚动从集合 View 单元格中消失 subview-LMLPHP

结果,我试图像这样将视图设置为单元格的子视图:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "metadataCell", for: indexPath) as? MetaDataCustomCell
            else { fatalError("Unexpected cell in collection view") }

        if !cell.subviews.contains(playButtonView) {
            let playButtonX = cell.thumbnailImageView.frame.width/2 - playButtonWidthAndHeight/2
            let playButtonY = cell.thumbnailImageView.frame.height/2 - playButtonWidthAndHeight/2
            playButtonView.frame = CGRect(x: playButtonX, y: playButtonY, width: playButtonWidthAndHeight, height: playButtonWidthAndHeight)
            cell.addSubview(playButtonView)

        } else {
            cell.sendSubviewToBack(playButtonView)
        }


        cell.representedAssetIdentifier = asset.localIdentifier

        DispatchQueue.global(qos: .userInitiated).async {

            let requestOption = PHImageRequestOptions()
            requestOption.isSynchronous = true
            self.imageManager.requestImage(for: asset, targetSize:   self.photoSize, contentMode: .aspectFit, options: requestOption, resultHandler: { image, _ in

                if cell.representedAssetIdentifier == asset.localIdentifier {
                    DispatchQueue.main.async {
                        cell.thumbnailImageView.image = image

                    }

                    self.getInfoForAsset(asset: asset) {(assetURL,urlAsset) in

                        if let url = assetURL {

                            if asset.mediaType == .image {
                                self.getDataFromImageURL(imageURL: url, imageAsset: asset, handler: { (metadataDict) in

                                    DispatchQueue.main.async {
                                        cell.dateLabel.text = metadataDict["date"]
                                    }
                                })

                            } else if asset.mediaType == .video {


                                DispatchQueue.main.async {

                                    self.playButtonView.isHidden = false
                                    cell.bringSubviewToFront(self.playButtonView)



                                }
                            }


                        }

                    }


                }
            })
        }


        return  cell


现在,问题在于playButtonView仅在第一个单元格加载时出现,在我再次向前或向后滚动到同一单元格后,它消失了。有任何想法吗?

最佳答案

您的playButtonView是视图控制器的属性,而不是您的MetaDataCustomCell。除非只有一个MetaDataCustomCell,否则这将无法工作,因为只有一个playButtonView,您将始终从一个单元格中删除该单元格并将其添加到下一个单元格中。而是将该属性移到您的单元格中。

关于ios - 通过滚动从集合 View 单元格中消失 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55907890/

10-10 20:32
查看更多