Я строю настольную игру iOS (похожую на scrabble или words), которая включает в себя перемещение маленьких фрагментов на экране, и я нахожу, что пользователю иногда трудно трогать и перемещать плитки, потому что они слишком маленькие , Из-за дизайна игры я не могу увеличить размер плитки, поэтому мне пришлось реализовать некоторые небольшие трюки, которые облегчают настройку и перемещение плитки для пользователя, и они хорошо работают. Единственная проблема, которая остается, заключается в том, что пользователь иногда касается едва только за пределами плитки, и когда пользователь пытается ее переместить, плитка остается там, где она есть.Как я могу «поймать» подпункт во время жестового удара на устройстве iOS?
У меня есть две идей, как я могу это исправить ...
- Если плитка не трогало, когда пользователь касается экрана, я могу использовать сенсорное расположение родительского вида, чтобы найти ближайшую плитку в положение касания и каким-то образом переместить событие касания к виду этой плитки.
- Если плитка не касается, когда пользователь касается экрана, я могу как-то «поймать» плитку, когда пользователь перетаскивает ее пальцем по ней, когда они пытаются ее переместить.
Я бы предпочел реализовать решение № 2, так как решение № 1 связано с множеством проблем, не говоря уже о том, что решение №2 является более реалистичным. Тем не менее, как я могу «поймать» плитку, когда пользователь перетаскивает ее пальцем по ней и посылает ей события касания, чтобы переместить его там, где находится палец?
В настоящее время мои плитки реализованы в виде подклассов UIView, и они обрабатывают события касания (касаютсяBegain, touchhesMoved и touchesEnded) напрямую. Так что, если пользователь касается едва только за пределами представления и перетаскивает свой палец над представлением, он не получает никаких событий касания, так как он не получил начальное событие touchsBegan.
Заранее благодарим за вашу мудрость!
спасибо, Брайан, это звучит как правильный подход здесь. быстрый вопрос, если я переопределяю метод hitTest в виде доски, что именно я хочу делать внутри него? Я хочу, чтобы цикл через все плитки и проверить, попадает ли точка хита на любую из плиток? если да, то в чем смысл переопределять метод hitTest, почему бы мне просто не проверить это в методах события касания платы (т. е. коснутьсяBegan, touchhesMoved и т. д.)? – BeachRunnerFred
Обновленный ответ с более подробной информацией – Brian
спасибо, Брайан, который помогает много. Я сделаю это! Кроме того, поскольку мой вид платы содержит другие типы просмотров, а не только фрагменты, я предполагаю, что мне нужно будет проверить тип объекта, который возвращается из вызова в [super hitTest], и убедиться, что это вид плитки. должен ли я использовать [hitView isKindOfClass: [TileView class]] для этого? – BeachRunnerFred