Узел Cocos2d над элементом uikit

#uikit #cocos2d-iphone

#uikit #cocos2d-iphone

Вопрос:

У меня есть CCScene с несколькими элементами UIKit [например, UITextView]. После некоторого взаимодействия с пользователем я хочу открыть всплывающее окно над сценой, чтобы также охватить часть UITextView. Не имеет значения, какой индекс z я использую, он всегда будет отображаться в текстовом представлении. Любые советы о том, как это сделать?

Ответ №1:

Ваши CCNodes отображаются в EAGLView, который использует Cocos. Вам необходимо управлять порядком EAGLView (ов) относительно других UIViews. Взгляните на http://www.gdcvault.com/play/1012504/The-Best-of-Both-Worlds для примера смешивания рисования Cocos в EAGLViews с другими представлениями UIKit.

Комментарии:

1. не могли бы вы быть более конкретными, пожалуйста? Документ, на который вы указываете, на самом деле не очень полезен, поскольку это совершенно другой сценарий. На самом деле это не cocos2d.

2. Cocos2d может отображать CCNodes только в EAGLView. Это точно такая же проблема. Однако, возможно, вы найдете raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit полезно. Короткий ответ по-прежнему заключается в том, что вам нужно несколько EAGLViews. Один EAGLView не может рисовать себя как над, так и под каким-либо другим UIView.

3. Вы предполагаете, что нет способа сделать это «легко» — то есть использовать обычный поток cocos2d. В любом случае… В итоге я скрыл элементы перед отображением всплывающего окна. Не совсем идеальный способ, но пока этого будет достаточно. Спасибо.

4. Вы можете ввести фиктивный UIView, к которому вы добавляете EAGLView, а также свои представления UIKit. Таким образом, вы можете упорядочить различные представления в соответствии с тем, что вам нужно, чтобы у вас были представления UIKit в фоновом режиме И на переднем плане. Посмотрите пример Cocos2D-With-UIKit в Kobold2D, чтобы увидеть, как это делается: kobold2d.com

Ответ №2:

Еще одна мысль, и я говорю это с головы до ног, не пытаясь сначала…

Из памяти вы можете из пользовательского интерфейса получить изображение содержимого этого представления. Если после завершения взаимодействия с пользователем вы хотите разместить всплывающее окно над текстовым полем, вы можете создать из него UIImage, превратить его в текстуру, создать из него ccsprite и поместить его в то же место на экране. Затем вы можете скрыть фактическое текстовое поле, а затем открыть всплывающее окно. Пользователь не сможет заметить разницу.

Комментарии:

1. но тогда мне пришлось бы пройти через ад позиционирования при обнаружении нажатий на кнопки во всплывающем окне 😉 У меня есть около 5 типов всплывающих окон, в том числе с текстовыми полями, кнопками / — и обычными кнопками.

2. Извините, но из вашего вопроса я понял, что всплывающее окно должно было отображаться после взаимодействия с пользователем, поэтому я решил, что подделка не помешает.