Написано по мотивам этой темы на форуме. Перед нами поставлена задача использовать 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, это обязательно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *