У меня есть UIImageView
из раскадровки с выходом в моем UICollectionViewController
:
@IBOutlet var playButtonView: UIImageView!
Раскадровка не позволяет мне делать розетку где угодно, кроме моего контроллера просмотра, так как я сделал видвне холста VC, чтобы я мог динамически позиционировать его:
В результате я пытаюсь установить представление как подпредставление ячейки следующим образом:
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 появляется только тогда, когда первая ячейка загружена, после того, как я прокручиваю вперёд или назад в ту же ячейку снова, она исчезает.Есть идеи?