在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:之外的任何东西不起作用的原因是如果你不使用该方法来创建按钮,则不会设置按钮的背景颜色,默认情况下它是clearColor.使用[button setBackgroundColor:[UIColor redColor]]或任何其他颜色修复问题.此外,如果使用像this one这样的自定义按钮类,如果按钮未连接到笔尖,则可能需要手动调用[button awakeFromNib].
最佳答案 尝试下面的代码,它会对你有所帮助
-(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");
}