2014-07-11 24 views
5

Ciao ragazzi Ho provato a implementare ADBannerView con il vecchio modo come l'Objective C ma senza successo. Tutto funziona ma gli annunci non vengono visualizzati, rimane un campo vuoto.Swift - ADBannerView

func bannerViewDidLoadAd(banner: ADBannerView!) { 
    UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(1) 
    banner.alpha = 1 
    UIView.commitAnimations() 
} 

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { 
    UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(1) 
    banner.alpha = 0 
    UIView.commitAnimations() 
} 

Chiunque abbia già provato iAd su Swift?

+0

Ciao, sto cercando di usarlo anche io. Ho trovato il seguente: https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Reference/ADBannerViewDelegate_Ref/ –

+0

aggiungi il delegato in cima alla tua classe con ", ADBannerViewDelegate" invece del vecchio modo "" –

+0

Ti consiglierei di utilizzare chiusure per le animazioni di UIView: 'UIView.animateWithDuration (1) {/ * animazioni ... * /}' –

risposta

17

Ho trovato una soluzione, come implementarla. (È possibile utilizzare all'interno di ogni metodo "banner.alpha 1.0" o altre cose, anche.)

//import ... your normal imports as UIKit etc. 
import iAd 

class YourClassViewController: UIViewController, ADBannerViewDelegate { 

    @IBOutlet var adBannerView: ADBannerView //connect in IB connection inspector with your ADBannerView 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.canDisplayBannerAds = true 
     self.adBannerView.delegate = self 
     self.adBannerView.hidden = true //hide until ad loaded 
    } 

    func bannerViewWillLoadAd(banner: ADBannerView!) { 
     NSLog("bannerViewWillLoadAd") 
    } 

    func bannerViewDidLoadAd(banner: ADBannerView!) { 
     NSLog("bannerViewDidLoadAd") 
     self.adBannerView.hidden = false //now show banner as ad is loaded 
    } 

    func bannerViewActionDidFinish(banner: ADBannerView!) { 
     NSLog("bannerViewDidLoadAd") 

     //optional resume paused game code 

    } 

    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool { 
     NSLog("bannerViewActionShouldBegin") 

     //optional pause game code 

     return true 
    } 

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { 
     NSLog("bannerView") 
    } 

    //... your class implementation code 

} 

See the following answer, on how to do it without IBBuilder!

+1

Funziona anche senza il protocollo @objc ... {} –

+0

Non riesco a nascondere l'annuncio utilizzando questo. self.adBannerView.hidden = true Qualche idea? –

+0

@RohitGoyal L'ho provato un'altra volta e funziona ancora perfettamente per me con Xcode 6.0 (6A313). Potresti controllare se self.adBannerView! = Null e debuggarlo.Senza alcun codice, non possiamo aiutare mi dispiace. –

1

Mr. T risposta contiene un sacco di codice inutile.

Tutto ciò che serve è questa parte per mostrare gli annunci nel tuo controller:

override func viewDidLoad() { 
     super.viewDidLoad() 

     canDisplayBannerAds = true 
} 

E quando non hai bisogno di annunci, è canDisplayBannerAds = false.

Che cosa fa - avvolgere il controller in un altro controller con banner pubblicitari in basso. Questa funzione è disponibile dal iOS7.

Non è possibile ottenere messaggi delegati con esso, quindi se necessario, è necessario sostituirlo con la variabile di istanza ADBannerView.

+0

Nessun metodo delegato? Bene, puoi farlo in questo modo, ma poi visualizzi un annuncio senza aver completato il caricamento - non è bello per l'utente. E se l'utente tocca l'annuncio, devi interrompere qualcosa nella tua app o gioco, questo è possibile solo con i metodi delegati. –

+0

@ Mr.T Senza aver completato il caricamento? Cosa significa esattamente? – Shmidt

+0

@ Mr.T Il tuo downvoting mostra che non capisci cosa sia '' 'canDisplayBannerAds'''. – Shmidt

3

Se si utilizza iOS 7, metodi di estensione e le proprietà sono stati aggiunti alla UIViewController per supportare la gestione di iAd:

Vedi

https://developer.apple.com/library/prerelease/ios/documentation/iAd/Reference/UIViewController_iAd_Additions/index.html

Per mostrare un iAd è necessario innanzitutto aggiungere il framework iAd, vai alle proprietà del progetto, scheda generale, aggiungi il file iAd.framework nella sezione Framework e librerie collegate.

Nel controller della vista, importare iAd per accedere agli interni iAd. E infine in viewDidLoad, imposta self.canDisplayBannerAds = true.

per evitare le pubblicità, impostare canDisplayBannerAds false

Nota non c'è bisogno di creare un ADBannerView nella scheda di storia o di programmazione e non v'è alcuna necessità per il vostro controller della vista per l'attuazione del AdViewDelegate.

import UIKit 
import iAd 

class ViewController : UIViewController 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     //That's it 
     self.canDisplayBannerAds = true 
    } 
} 
+0

Funzionante! upvoted – Zl3n