Я разрабатываю игру, которую вы можете сравнить с головоломкой, где у меня есть несколько игровых плиток, которые будут сопоставляться друг с другом на поверхности (позже называемой MainView). В начале игры плитки будут размещены под MainView в IdleView. Я перемещаю плитки жестом панорамирования. Я выбираю плитку с помощью жеста касания, и, наконец, мне нужно иметь возможность вращать плитки. Я делаю это с помощью жеста поворота. Это вызвало некоторые проблемы, которые мне удалось решить, но затем мне пришлось поместить плитки в UIScrollView, так как мне нужно много, чтобы иметь возможность отображать их все сразу.
Я сделал несколько разных реализаций, и все они вызвали некоторые проблемы. Я расскажу о различных подходах, которые я пробовал.
Подход 1. Панорама, Коснитесь -> Плитка, Поверните -> 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 и по-прежнему иметь возможность вращать плитки без панорамирования других плиток.