Ich habe die iAdSuite mit Storyboards in swift repliziert und das iAd funktioniert über alle View-Controller hinweg, aber wenn die Delegate-Methode bannerViewDidLoadAd(banner: ADBannerView!)
aufgerufen wird, wird die Banner-Ansicht nicht sofort angezeigt. Ich muss entweder den Simulator drehen oder zu einem anderen Tab gehen, damit er erscheint.
Ich denke, das ist der Teil von Apple Beispielcode in Objective-C, den ich nicht zu "schnell" übersetzen konnte? was dazu führen kann, dass die iAd nach dem Laden nicht asynchron angezeigt wird ...
%Vor% Dies ist meine Klasse BannerViewManager
mit den Methoden ADBannerViewDelegate
.
BEARBEITEN
Ich habe es geschafft, den objektiven C-Code oben auf diesen Beitrag zu konvertieren SO , aber ich habe immer noch das selbe Problem. Das iAd erscheint nicht sobald es geladen ist. Es muss irgendeine Art von Änderung an der Ansicht vorgenommen werden, so dass dies geschieht, entweder durch Drehen des Geräts oder durch Antippen eines anderen Tabs usw. ...
Nun sieht mein sharedInstance
so aus:
Ich denke, ich habe herausgefunden, was das Problem ist. Es hat nichts damit zu tun, wie ich die gemeinsame Instanz der Klasse BannerViewManager
initialisiere. In der Tat stellte sich heraus, genau dasselbe Verhalten zu geben, ob% Co_de% oder die neue Swift 2.0 Weg verwendet.
Die Sache, die dazu führte, dass die iAd nicht sofort angezeigt wird, wenn dispatch_once
aufgerufen wurde, ist, dass bannerViewDidLoadAd
tatsächlich nie aufgerufen wurde!
Ich musste hier und da einige Druckanweisungen hinzufügen. Sowohl in meinem Code als auch im Apple Beispielcode, um zu dieser Schlussfolgerung zu gelangen.
So viewDidLayoutSubviews
anstelle von setNeedsLayout
erzwungenes Auslösen des layoutIfNeeded
Tags und Links objective-c ios swift iad