Добавление UIButtons в проект Cocos2d - PullRequest
4 голосов
/ 31 декабря 2011

В 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, который является первой сценой, представленной в приложении, если это имеет значение.Что я здесь не так делаю?Спасибо!

Редактировать: я могу подтвердить, что кнопки добавляются в подпредставления окон, потому что 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]] или любого другого цвета решает проблему.Кроме того, если вы используете пользовательский класс кнопок, например , этот , вам может потребоваться вручную вызвать [button awakeFromNib], если кнопка не подключена к перу.

Ответы [ 3 ]

1 голос
/ 31 декабря 2011

Попробуйте приведенный ниже код, это поможет вам

-(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 голос
/ 04 января 2012

Я опубликовал решение проблемы в виде редактирования вопроса.

0 голосов
/ 31 декабря 2011

Попробуйте использовать метод приноситubviewtofront окна OpenGL, передав в качестве аргумента недавно добавленную кнопку. Также убедитесь, что рамка вашей кнопки такова, что она находится в видимой части экрана. Попробуйте поиграть со своей позицией.

...