Come chiamare il metodo in ViewController da Skscene
-
20-12-2019 - |
Domanda
Ho creato un metodo in viewcontroller.h chiamato - (annulla) showfullscreenad.
Ho provato a chiamarlo nella mia scena. Ho provato [self.view.window.rootcontroller showfullscreenad].Non riesci a trovare questo metodo.
Ho provato ViewController * VC= [[ViewController ALLOC] Init]
ha fatto con successo NSLOG "Richiesta AD interstiziale".Ma nessun annuncio mostrato.
Se utilizzo il metodo direttamente in ViewController.m - ViewDidload, nlog lo stesso messaggio "Richiesta di annunci interstiziali" e visualizza un annuncio interstiziale.
Soluzione
Utilizzerei le notifiche: l'oggetto SKScene
pubblica una notifica a livello di sistema (NSNotification
) al Centro di notifica (NSNotificationCenter
) e il controller di visualizzazione mirato solo 'registri' (cioè ascolta) a quella stessa notifica e implementa un gestoremetodo.Questo è un modello pervasivo nell'obiettivo-c / cococa.
Alcuni vantaggi sono:
- .
-
è estensibile: se in futuro, si desidera inviare lo stesso messaggio al controller di visualizzazione Formare una scena diversa, basta pubblicare la stessa notifica dalla nuova scena: non è necessario includere intestazioni e definire un nuovoproprietà.Solo bisogno di includere la definizione del nome della notifica.
-
Il controller di visualizzazione possiede La vista e la vista presenta la scena.Per Non fare riferimento a Il controller di visualizzazione dalla scena, si evita il rischio di un ciclo di riferimento e quindi una perdita di memoria.
A proposito, questo è quello che faccio nei miei giochi.
Altri suggerimenti
un suggerimento su come usare iAD;
in viewcontroller.m:
MyScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.viewController = self;
.
E poi nel tuo MyScene.h Metti quelle linee:
#import "ViewController.h"
@property (nonatomic) ViewController *viewController;
.
Inoltre non dimenticare di aggiungere IAD in ViewController.m;
[self.view addSubview:adView];
.