将UIButtons添加到Cocos2d项目

时间:2011-12-30 21:07:42

标签: iphone uikit cocos2d-iphone uibutton

在Cocos2d中,我已经阅读了

[[[[CCDirector sharedDirector] openGLView] window] addSubview:someButton];

将向主窗口添加UIView:http://www.cocos2d-iphone.org/forum/topic/3588

然而在我的代码中我有这个:

- (void)onEnterTransitionDidFinish {
    UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [[[[CCDirector sharedDirector] openGLView] window] addSubview:button];
}

但没有按钮可见。此方法是CCLayerColor的一部分,CCLayerColor是应用程序中显示的第一个场景,如果这很重要的话。我在这做错了什么?谢谢!

编辑:我可以确认按钮是否已添加到Windows子视图中,因为NSLogging

[[[[[CCDirector sharedDirector] openGLView] window] subviews] count]

显示我评论/取消注释addSubview行时的差异。那么为什么按钮不显示呢?

编辑2:

感谢@Marine,我发现我的问题就是我宣布按钮的方式;使用buttonWithType:解决了问题,因为此代码有效:

UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(100, 100, 100, 100)];
[[[[CCDirector sharedDirector] openGLView] window] addSubview:button];

有人可以向我解释为什么使用这种类方法有效并使用initWithFrame:不行吗?因为我宁愿不创建大量自动释放的对象,也因为我有一些UIButton子类在我使用buttonWithType:方法时不显示。

编辑3 (解决方案)

使用除buttonWithType:以外的任何内容不起作用的原因是,如果您不使用该方法创建按钮,则不会设置按钮的背景颜色,默认情况下为{{1 }}。使用clearColor或任何其他颜色可以解决问题。此外,如果使用自定义按钮类this one,如果按钮未连接到笔尖,则可能需要手动调用[button setBackgroundColor:[UIColor redColor]]

3 个答案:

答案 0 :(得分:1)

尝试下面的代码,它可以帮助你

-(id) init 
{
    if((self = [super init])) 
    {
    UIView* glView = (UIView*) [[CCDirector sharedDirector] openGLView];        
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn setFrame:CGRectMake(100, 100, 250, 250)];
    [btn addTarget:self action:@selector(actionper:) forControlEvents:UIControlEventTouchUpInside];
            [glView addSubview:btn];
    }
    return self;
}
-(void) actionper : (id) sender
{
    printf("\n Stuff of the Code on button Press");
}

答案 1 :(得分:1)

我已将问题的解决方案发布为问题的编辑。

答案 2 :(得分:0)

尝试使用OpenGL窗口的bringubviewtofront方法将最近添加的按钮作为参数传递。还要确保按钮的框架位于屏幕的可见部分。试着玩它的位置。