我现在需要让我的 cocos2d-x 游戏一直显示白底黑字的状态条。
根据这篇文章,我的做法如下:
View controller-based status bar appearance
NOStatus bar is initially hidden
NOStatus bar style
Gray style (default)在frameworks/runtime-src/proj.ios_mac/ios/AppController.mm
中的 application:didFinishLaunchingWithOptions:
添加如下代码(完整代码见后面)。
[[UIApplication sharedApplication].statusBarStyle:UIStatusBarStyleDefault];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
// The OpenGLWindow
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
- (BOOL)prefersStatusBarHidden
{
return NO;
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
由于上提到的参考 文章 是显示的黑底白字的状态条,然而我的需求是白底黑字。
最终产生的结果如下:
上面的黑色部分其实就是状态条,只是背景(由于窗口被下移,没有绘制那块区域)也是黑色的,所以就黑成一团了。
cocos2d-x 提供的模板,是这样创建 _window
的:
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
我根据上面的文章,将窗口下移,我修改后的代码:
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
UI 是这样的结构(完整代码见『附』):
如上图,黄色为标识区域为 StatusBar
红色标识区域为_window
_window
内部为 [_window]---rootViewController--> [viewController] ---view--> [eaglView]
eaglView
是最终 cocos2d-x 绘图的区域,他填满整个 _window
。
现在我想要的结果是让上图的黑色区域底色变成白色,由于我不懂 iOS ,我猜想的方案可能是:
_window
平级的白色 UIView ,放到黑色区域。eaglView
『挤』下去。大致就是这些,请大家指点下我,最好有代码。我不熟悉 iOS 开发。
感谢了!
application:didFinishLaunchingWithOptions
完整代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
cocos2d::Application *app = cocos2d::Application::getInstance();
app->initGLContextAttrs();
cocos2d::GLViewImpl::convertAttrs();
// Override point for customization after application launch.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
// Add the view controller's view to the window and display.
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [self.window bounds]
pixelFormat: (NSString*)cocos2d::GLViewImpl::_pixelFormat
depthFormat: cocos2d::GLViewImpl::_depthFormat
preserveBackbuffer: NO
sharegroup: nil
multiSampling: NO
numberOfSamples: 0 ];
[eaglView setMultipleTouchEnabled:YES];
// Use RootViewController manage CCEAGLView
viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
viewController.wantsFullScreenLayout = YES;
viewController.view = eaglView;
// Set RootViewController to window
if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
{
// warning: addSubView doesn't work on iOS6
[self.window addSubview: viewController.view];
}
else
{
// use this method on ios6
[_window setRootViewController:viewController];
}
[_window makeKeyAndVisible];
// IMPORTANT: Setting the GLView should be done after creating the RootViewController
cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView);
cocos2d::Director::getInstance()->setOpenGLView(glview);
app->run();
return YES;
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.