ios - Peek и Pop - сохранить угловой радиус UIImageView внутри UICollectionView внутри UITableViewCell

Мой взгляд структурирован так:

UITableView
|    
+-- MyTableViewCell
|  |  
|  +-- UICollectionView
|     |  
|     +-- MyCollectionViewCell
|       |  
|       +-- UIImageView

UIImageView называется icon, а его слой имеет определенный радиус угла. Я реализовал Peek и Pop для элементов в представлении коллекции, и это работает, но я не могу понять, как включить угловой радиус изображения в рамку предварительного просмотра.

Вот как я регистрирую tableView для предварительного просмотра:

if #available(iOS 9.0, *), traitCollection.forceTouchCapability == .available {
    registerForPreviewing(with: self, sourceView: tableView)
}

И это моя функция предварительного просмотра (вдохновленный здесь):

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

    guard let indexPath = tableView.indexPathForRow(at: location) else { return nil }
    guard let cell = tableView.cellForRow(at: indexPath) as? MyTableViewCell else { return nil }

    guard let collectionIndex = cell.collectionView.indexPathForItem(at: self.view.convert(location, to: cell.collectionView)) else { return nil }

    guard let collectionViewCell = cell.collectionView.cellForItem(at: collectionIndex) as? MyCollectionViewCell else { return nil }
    let iconRect = tableView.convert(collectionViewCell.icon.frame, from: collectionViewCell.icon.superview!)
    previewingContext.sourceRect = iconRect

    return someViewController

}

Это то, что я получаю в рамке предварительного просмотра, когда прикасаюсь к изображению прямо перед фиксацией нового контроллера представления (поэтому внешняя сторона размыта):

image1

Это то, чего я хотел бы добиться, сохраняя угловой радиус изображения (скриншот из App Store):

image2

Читая другие посты, я считаю, что проблема заключается в том, что я регистрирую весь tableView для предварительного просмотра, а не его ячейки. Однако я не смог найти решение, которое бы работало для ячеек Collection View внутри ячеек Table View.

Любая помощь приветствуется.

2 ответа

Вместо того, чтобы конвертировать фрейм, вы пытались использовать его cellAttributes? Если в contentView.layer ячейки есть cornerRadius, это будет иметь это в виду. Так что-то вроде этого работает для нас:

let cellAttributes = collectionView.layoutAttributesForItem(at: indexPath)

previewingContext.sourceRect = cellAttributes.frame

Не могли бы вы переопределить UIImageView и создать какую-то пользовательскую функциональность рисования?

Другие вопросы по тегам