Не без дополнительной работы.
Чтобы понять это, вы должны учитывать, что вы добавляете вид камеры в openGLView от Cocos2D. Это делает вид с камеры «дочерним» видом вида Cocos2D. Это похоже на добавление дочернего узла к CCScene или CCLayer, а затем желание отрисовать этот узел за сценой или слоем. Вы не можете сделать это без изменения способа настройки иерархии представления.
Так что вам придется изменить запуск Cocos2D так, чтобы openGLView не добавлялся непосредственно в UIWindow, а в другой UIView.
UIView* dummyView = [[UIView alloc] initWithFrame:[window bounds]];
[dummyView autorelease];
[dummyView addSubview:[CCDirector sharedDirector].openGLView];
rootViewController.view = dummyView;
Затем вы можете добавить вид камеры в dummyView (не openGLView или у вас возникнет та же проблема, что и раньше) и выполнить sendSubviewToBack , чтобы он был в фоновом режиме.
Вам также придется инициализировать представление OpenGL Cocos2D с помощью pixelFormat kEAGLColorFormatRGBA8, чтобы обеспечить альфа-канал.
EAGLView* glView = [EAGLView viewWithFrame:[window bounds]
pixelFormat:kEAGLColorFormatRGBA8
depthFormat:0
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
Вам также нужно сделать прозрачным openGLView:
[CCDirector sharedDirector].openGLView.opaque = NO;
Конечно, это работает только в том случае, если вы ничего не отображаете в полноэкранном режиме в представлении cocos2d. Например, если вы предоставляете полноэкранное фоновое изображение для вашего представления Cocos2D, ничего не будет отображаться, поскольку фоновое изображение отображается поверх вида камеры.
Более подробное объяснение вы можете найти во втором издании моей книги . Вы также можете скачать исходный код книги по этой ссылке и посмотреть примеры из главы 15. Или загрузить Kobold2D и использовать предоставленный шаблонный проект Cocos2D-With-UIKit-Views.