Как вызвать метод в ViewController из SKScene
-
20-12-2019 - |
Вопрос
Я создал метод в ViewController.h с именем - (void)showFullScreenAd.
Я попытался вызвать это внутри моей сцены.Я попробовал [self.view.window.RootController showFullScreenAd].Не могу найти этот метод.
Я попробовал ViewController *vc = [[ViewController alloc] init]
Он успешно зарегистрировал "Запрос на межстраничную рекламу".Но реклама не показывалась.
Если я использую метод непосредственно в ViewController.m - viewDidLoad, он выводит то же сообщение "Запрос промежуточной рекламы" и отображает промежуточную рекламу.
Решение
Я бы использовал уведомления:то SKScene
объект отправляет общесистемное уведомление (NSNotification
) в центр уведомлений (NSNotificationCenter
), а целевой контроллер представления просто "регистрирует" (т.е. прослушивает) это же уведомление и реализует метод обработчика.Это распространенный шаблон в Objective-C/Cococa.
Некоторыми преимуществами являются:
Она расширяема:если в будущем вы захотите отправить такое же сообщение контроллеру просмотра из другой сцены, просто отправьте такое же уведомление из новой сцены:нет необходимости включать заголовки и определять новое свойство.Нужно только указать определение названия уведомления.
Контроллер представления владеет вид, и вид из окна представляет сцена.Около не ссылающийся используя контроллер просмотра со сцены, вы избегаете риска опорного цикла и, следовательно, утечки памяти.
Кстати, это то, что я делаю в своих играх.
Другие советы
Предложение о том, как использовать IAD;
в viewcontroller.m:
MyScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.viewController = self;
.
, а затем в вашем MyScene.h Поместите эти линии:
#import "ViewController.h"
@property (nonatomic) ViewController *viewController;
.
Также не забудьте добавить IAD в viewcontroller.m;
[self.view addSubview:adView];
.