Как закрыть слой который показывал в другом слое в cocos2d-iphone

У меня есть один слой с именем alayer, и есть кнопка с именем abutton. Когда вы нажимаете кнопку, другой слой с именем blayer будет отображаться в alayer, а не replaceScene, пожалуйста, посмотрите следующий код:

alayer.m

-(void)abuttonclicked:(id)sender
{
  blayer *blayer = [blayer node];
  blayer.position = ccp(1,1);
  [self addChild:blayer];
}

У blayer.m есть кнопка с именем bbutton и строковое значение с именем bstring, я хочу нажать кнопку b, она закроет blayer (удалить blayer из alayer) и передаст строковое значение bstring alayer, пожалуйста, посмотрите следующий код:

 -(void)bbuttonclicked:(id)sender
 {
  // how can do here to close its self(remove its self from alayer), and pass the bstring to alayer?
 }

Благодарю.

пс. Я могу использовать NSUserDefault для передачи строкового значения, но я думаю, что это плохой способ сделать это, есть ли другой способ передать значение?

2 ответа

Возможно, чтобы передать строку, которую вы могли бы объявить и реализовать свойство в ALayer.h /.m

 @property(nonatomic,copy) NSString *stringFromLayerB;

удалить bLayer, когда bButtonClicked:

 -(void)bbuttonclicked:(id)sender
 {
     ALayer *lay = (ALayer*) self.parent;
     lay.stringFromLayerB = @"Whatever you want to set";
     [self removeFromParentAndCleanup:YES];
 }

Есть и другие способы сделать это. Вы можете реализовать механизм обратного вызова, использовать уведомления, связывание некоторых протоколов делегирования BLayer и ALayer. Все зависит от ваших реальных (невысказанных) требований.

Учитывая ваш сценарий, я думаю, что лучше использовать NSNotificationCenter. Вы можете опубликовать уведомление от Blayer при нажатии кнопки и добавить наблюдателя в Alayer, чтобы точно ответить, как нужно.

добавлять [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedNotification:) name:@"BlayerNotification" object:nil]; в инициации Алайера и [[NSNotificationCenter defaultCenter] removeObserver:self]; в свое дело.

Его селектор вроде:

- (void)receivedNotification:(NSNotification *)notification {
    NSString *string = (NSString *)notification.object;
    NSLog (@"String received %@", string);
}

Теперь вы можете публиковать уведомления от Blayer при нажатии кнопки:

-(void)bbuttonclicked:(id)sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BlayerNotification" object:self];
    [self removeFromParentAndCleanup:YES];
}
Другие вопросы по тегам