В 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]
, если кнопка не подключена к перу.