Как закрыть слой который показывал в другом слое в 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];
}