Как добиться прозрачного фона или закругленных углов при перетаскивании 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
}