В настоящее время у меня есть collectionView
, и его единственная функция - позволить пользователю выбирать цвет. Когда пользователь выбирает цвет (щелкает ячейку), выбранный индикатор (UIView
) анимируется внутри cell
, давая пользователю знать, что выбран определенный цвет. Основная функциональность есть, но мой вопрос больше основан на пользовательском интерфейсе. Когда я прокручиваю, ячейка думает, что я щелкаю по ней, и она устанавливает isSelected
в true на секунду, пока я не уберу свой палец из ячейки. Это вызывает анимацию в нежелательное время. Итак, я думаю, что проблема в shouldSelectItemAt
в CollectionViewDelegate
методах. С помощью UIGestureRecognizer
я могу измерить, имеет ли sender state
.began
или .ended
. Будет ли мой вопрос вызывать это или что-то подобное?
Вот методы выбора collectionView
делегата.
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = colorPreviewCollectionView.cellForItem(at: indexPath) as! TrayColorPreviewCell
// stuff with cell happens here
}
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
let cell = colorPreviewCollectionView.cellForItem(at: indexPath) as! TrayColorPreviewCell
guard cell.isSelected else { return true }
return false
}
В классе TrayColorPreviewCell
(custom UICollectionViewCell
) я использую isSelected
для запуска анимации. Эта анимация повторяется при прокрутке.
override var isSelected: Bool {
didSet {
changeSelectionStatus()
}
}
func changeSelectionStatus() {
if isSelected {
// animation to indicate selection
} else {
// animation to indicate changed selection
}
}