Как добиться прозрачного фона или закругленных углов при перетаскивании UICollectionViewCell

Я уверен, что должен быть простой способ сделать это, но я провел долгое время в различных кроличьих норках безуспешно.

У меня есть представление коллекции, которое поддерживает перетаскивание. Перетаскиваемые клетки имеютUIImageView в contentView, а к фоновому слою представления изображения применен радиус угла. Цвет фона для всех видов в ячейке ясный.

При перетаскивании ячейка имеет белый фон, который появляется по углам представления изображения:

Есть ли способ округлить весь перетаскиваемый вид; или установить его фон на очистку, чтобы раздражающая белая рамка не была видна?

ОБНОВИТЬ

Оказывается, решение является ошеломляюще простой (при условии,UIBezierPaths соответствует вашему определению простого):

Вам нужно переопределить collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) метод UICollectionViewDragDelegate протокол и возврат UIDragPreviewParameters с соответствующим набором UIBezierPath:

func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
    let previewParams = UIDragPreviewParameters()

    let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 140, height: 140), cornerRadius: 20)
    previewParams.visiblePath = path

    return previewParams
}

Это наивная реализация, которая жестко кодирует CGRectиз которого выводится путь Безье - это работает для моего сценария, потому что все ячейки одинакового размера. Здесь для более сложного представления коллекции потребуются некоторые пользовательские вычисления.

0 ответов

Я думаю, это даже проще, чем это. Если ваша ячейка уже имеет чистый фон с закругленным UIImageView, вам нужно только установить backgroundColor в виде .clear за UIDragPreviewParameters.

func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
  let params = UIDragPreviewParameters()
  params.backgroundColor = .clear
  return params
}
Другие вопросы по тегам