Для игры я хочу создать сетку фигур, которые находятся рядом (красиво граничат друг с другом) и могут быть перетаскиваемыми / заменяемыми.Например, сетка из шестиугольников или треугольников.Я понятия не имею, как это сделать.Могу ли я сделать это с collectionView или мне нужно использовать spriteKit или что-то еще?Любые идеи относительно направления движения будут высоко оценены.
Обновление: поэтому я провел своего рода проверку концепции после некоторого поиска в Google, используя UIBezierPaths для рисования сетки треугольных фигур и функции UIBezierPath.contains (CGPoint) дляперетащить работу.Я сделал UIView подкласс TriangleView для рисования треугольников, но есть проблема, с которой я столкнулся.Два смежных треугольника, которые образуют квадрат, имеют одинаковую рамку, поэтому прозрачная часть одного всегда находится над другим треугольником.поэтому жесты панорамирования / касания ударяют по прозрачной части, а не по видимому треугольнику внизу, любые идеи, как игнорировать прозрачную часть и поразить треугольник внизу.Прямо сейчас, в основном, я не действую на жесте, если он касается прозрачной части (поэтому он перемещается только при касании реальной формы)
Как это все выглядит
код для распознавателя жестов панорамирования:
@objc func draggedView(_ sender:UIPanGestureRecognizer){
var shouldDrag:Bool = false
let tapLocation = sender.location(in: (sender.view! as! TriangleView))
shouldDrag = (sender.view! as! TriangleView).hitTest(tapLocation: CGPoint(x: tapLocation.x, y: tapLocation.y)) //returns whether tap is in UIBezierPath portion of UIView and not transparent part
if shouldDrag{
self.view.bringSubview(toFront: (sender.view! as! TriangleView))
let translation = sender.translation(in: self.view)
(sender.view! as! TriangleView).center = CGPoint(x: (sender.view! as! TriangleView).center.x + translation.x, y: (sender.view! as! TriangleView).center.y + translation.y)
sender.setTranslation(CGPoint.zero, in: self.view)
}
}
Обновите снова: поэтому после некоторого поиска я обнаружил, что лучшим вариантом было бы переопределить этот метод в моем подклассе UIView:
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
if triangleBezierPath.contains(point){
return true
}
return false
}
так что теперь мне даже не нужно проверять это во время жеста, прозрачная часть вне треугольника полностью игнорируется.Кажется, это работает немного более плавно.Как вы думаете, это было бы лучше сделать с помощью SpriteKit или CollectionView?Мне все еще нужно выяснить, как поменять фигуры на перекрывающееся перетаскивание