Написано по мотивам этой темы на форуме. Перед нами поставлена задача использовать UIKit в Cocos2d окружении. Сам я не занимаюсь Cocos2d, поэтому при каких-либо неточностях попрошу не пинать.
Для начала мы должны определить для себя какую-либо глобальную UIView. В Cocos2d используются CCScene для представления экрана (если не ошибаюсь) и UIView из него достать не получалось.
Насколько я знаю, в AppDelegate.m должен быть такой код:
// создаете OpenGL-вид EAGLView *glView = [EAGLView viewWithFrame:[window bounds] pixelFormat:kEAGLColorFormatRGB565 depthFormat:0];
Также, в приложении должен существовать какой-нибудь главный UIViewController. Объявление его идет в AppDelegate. Для него назначают OpneGL-вид (который создали выше):
// назначить вид
[viewController setView:glView]; [window addSubview: viewController.view]; [window makeKeyAndVisible];
Я привел шаблонный код нового проекта. Теперь нужно разобраться с вопросом — как показывать стандартные вещи из UIKit? Можно создать глобальную UIView, которая будет едина для всего проекта и которую можно будет вызывать откуда угодно. Лучше всего сделать с помощью Singleton (вот тут написано как — http://idev.by/ios/20936/ ). Реализуете Singleton и делаете в нем поле:
// h-файл @property (nonatomic, retain) UIView* globalView; // m-файл @synthesize globalView;
Обратите внимание, что тут ARC не используется.
Предположим, что ваш Singleton называется Global.
В AppDelegate вам нужно создать эту UIView и «запомнить» ее, ее можно положить на OpenGL-view.
UIView *view = [[[UIView alloc] initWithFrame:[window bounds]] autorelease]; [[Global sharedInstance] setGlobalView:view]; [glView addSubview:view]; // добавим на OpenGL-вид
Тогда, чтобы обратиться к глобальной view, можно делать так:
UIView* myView = [[Global sharedInstance] globalView];
Этой UIView следует задать прозрачный фон и размеры всего экрана. На нее следует ложить остальные view. Если view, добавленные на нее не реагируют на касания — попробуйте поставить
userIntercationEnables = YES;
Чтобы добавить UIViewController на вид, делайте так:
UIViewController* controller = ...; [[[Global sharedInstance] globalView] addSubview: controller.view];
Чтобы добавить UIView (либо наследованное):
UIView* myView = ...; [[[Global sharedInstance] globalView] addSubview: myView];
Так же, не забывайте проставлять frame, это обязательно.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: