Я создаю игру Mastermind в Swift, полностью программно, поэтому никаких раскадровок. Я сделал макет и функциональность, и теперь я пытаюсь выполнить sh, чтобы выделить текущую строку, над которой работает пользователь, и как только пользователь завершит работу с этой строкой, анимируйте ее до следующей. .
![XD Layout](https://i.stack.imgur.com/dfvLZ.png)
Прикрепленное изображение показывает макет XD с выделенными компонентами вида uicollectionview. Для тех, кто не может видеть изображение, макет, встроенный в UICollectionViewCompositionalLayout, представляет собой сетку с 10 секциями, расположенными вертикально. В каждом разделе есть 6 ячеек, 4 ячейки-заполнителя, которые заполняются цветом, одна пустая ячейка для заполнения, и одна «заменяемая» ячейка, которая начинается пустой, получает кнопку GUESS после того, как пользователь заполнил ячейки-заполнители, и, наконец, представление, отображающее, сколько прав получил пользователь. Вот код, за исключением отступов и layoutSize, для экономии места:
let guessItem = NSCollectionLayoutItem()
let guessGroup = NSCollectionLayoutGroup.horizontal(),
subitem: guessItem,
count: 4)
let emptyItem = NSCollectionLayoutItem()
let emptyGroup = NSCollectionLayoutGroup.vertical(),
subitem: emptyItem,
count: 1)
let dotItem = NSCollectionLayoutItem()
let dotGroup = NSCollectionLayoutGroup.vertical(
subitem: dotItem,
count: 1)
let guessRowGroup = NSCollectionLayoutGroup.horizontal(),
subitems: [ guessGroup, emptyGroup, dotGroup ])
let nestedGroup = NSCollectionLayoutGroup.vertical(
layoutSize: NSCollectionLayoutSize(),
subitems: [ guessRowGroup ])
let section = NSCollectionLayoutSection(group: nestedGroup)
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
Скажите, пожалуйста, хотите ли вы полный функциональный код, и я дам вам ссылку на Github.
То, что я пробовал, - это декорации, которые давали мне массу странных ошибок, и я не знал, как в любом случае анимировать или нацеливать конкретный выбор c, а также дополнительный вид.
In класс макета:
let overlayItemSize = NSCollectionLayoutSize(widthDimension: .absolute(45),
heightDimension: .absolute(45))
let overlayItemPlace = NSCollectionLayoutAnchor(edges: [.top, .trailing])
let overlayItem = NSCollectionLayoutSupplementaryItem(layoutSize: overlayItemSize,
elementKind: "OverlayItem",
containerAnchor: overlayItemPlace)
nestedGroup.supplementaryItems = [overlayItem]
Размер и положение - временная попытка получить рабочий код.
Код UiCollectionViewLayout:
// in override init
self.register(OverlayCollectionReusableView.self, forSupplementaryViewOfKind: "OverlayItem", withReuseIdentifier: overlayID)
// down below
func collectionView(_ collectionView: UICollectionView,
viewForSupplementaryElementOfKind kind: String,
at indexPath: IndexPath) -> UICollectionReusableView {
let overlayCell = collectionView.dequeueReusableSupplementaryView(ofKind: "OverlayItem", withReuseIdentifier: overlayID, for: indexPath)
return overlayCell
}
Проблема с этим что вместо того, чтобы показываться в верхнем правом углу, мой UICollectionViewReusableView заменяет элемент в позиции 5 в моем indexpath в каждом разделе, последней ячейке. Увеличение количества элементов до 7 также разрушает компоновку, и мне нужен только один, который переключает строки, а не по одному на раздел. десятая часть моего UICollectionView, у которого нет заданного размера, поскольку он просто ограничен верхним и нижним колонтитулами, и привязка к активной строке (переменная int).
У вас есть какие-либо предложения для меня?
Спасибо за потраченное время!