Я занимаюсь разработкой игры, которую вы можете сравнить с мозаикой, в которой у меня есть несколько игровых плиток, которые будут сопоставляться друг с другом на поверхности (позже на них ссылаются как на MainView). В начале игры плитки будут помещены под MainView в IdleView. Я перемещаю плитки с помощью жеста панорамирования. Я выбираю плитку, используя жест касания, и, наконец, мне нужно иметь возможность вращать плитки. Я делаю это жестом вращения. Это вызвало некоторые проблемы, которые мне удалось решить, но затем мне пришлось поместить плитки в UIScrollView, так как я должен был отображать их все сразу.
Я сделал несколько разных реализаций, и все они вызвали некоторые проблемы. Я пойду через различные подходы, которые я попробовал.
Подход 1. Pan, Tap -> Tile, Rotate -> MainView
Сначала я поместил распознавание касаний и панорамирования в игровой тайл и жест поворота на главном экране, потому что тайл слишком мал для выполнения жеста поворота. Затем я получил конфликт, когда случайно нажал другую тайл, когда сделал жест поворота, а затем этот фрагмент интерпретировал его как жест панорамирования. Это привело к тому, что я попробовал новый подход.
Подход 2. Панорамирование, Касание, Поворот -> MainView
Мой второй подход состоял в том, чтобы поместить все распознаватели жестов в MainView. Затем каждый раз, когда жест распознается, я проверяю, есть ли плитка в месте для жестов касания и панорамирования, вызывая CGRectContainsPoint ([gameTile frame], gestPoint);
Затем перед жестом вращения я проверяю, выбран ли тайл, и вызываю соответствующие методы. Это сработало отлично! Но потом я понял, что мне нужен какой-то механизм, чтобы позволить мне иметь больше плиток, чем можно было бы показать на весь экран. Поэтому я добавил UIScrollView, где я поместил плитки горизонтально, чтобы все было доступно. Я сделал небольшой рисунок ниже.
---------------------
| |
| |
| |
| Height 370 p |
| |
| MainView |
| |
| |
| |
| |
| |
| |
---------------------
| Height 110 p |
| IdleView |
| UIScrollView |
| |
| |
---------------------
Затем я добавил GameTiles в качестве подпредставлений в представление прокрутки, чтобы они прокручивались вместе с видом. Тогда они больше не слушали мои прикосновения, так как они не были подпредставлениями моего MainView. Так что теперь я нахожусь в некоторой тупиковой ситуации, когда я больше не знаю, что делать. Я могу переместить плитки, если я вернусь к подходу 1 и установлю canCancelContentTouches = NO для UIScrollView. Но тогда у меня снова возникнут проблемы с жестом поворота, и мне придется обнаружить коллизию, чтобы я мог переместить плитку с вида прокрутки на основной вид.
Я прочитал много разных постов по этой проблеме, но пока не смог разобраться в этом.
Может ли кто-нибудь дать мне несколько указателей на любой другой путь, чем UIScrollView, который позволяет мне иметь около 50 плиток, которые не мешают моим прикосновениям, и при этом позволяет им иметь разумный размер, чтобы я мог использовать распознаватели жестов на них. Или как плавно переместить плитку из UIScrollView в MainView и по-прежнему иметь возможность вращать плитки без панорамирования других плиток.