tipos rectangular opuesta matriz matrices ejemplo ios swift iad adbannerview

ios - opuesta - matriz rectangular



Swift iAd: más de 10 instancias de advertencia ADBannerView y CGAffineTransformInvert: salida de matriz singular (3)

Así que estoy tratando de configurar un banner de iAd simple en mi aplicación, pero recibo estas dos advertencias en la salida:

WARNING: More than 10 instances of ADBannerView or ADInterstitialView currently exist. This is a misuse of the iAd API, and ad performance will suffer as a result. This message is printed only once.

y

<Error>: CGAffineTransformInvert: singular matrix.

Esto es lo que estoy usando para implementar mi ADBannerView :

var adBannerView = ADBannerView() func loadAds() { adBannerView = ADBannerView(frame: CGRect.zeroRect) adBannerView.center = CGPoint(x: adBannerView.center.x, y: view.bounds.size.height - adBannerView.frame.size.height / 2) adBannerView.delegate = self adBannerView.hidden = true view.addSubview(adBannerView) } //BannerView did load ad func bannerViewDidLoadAd(banner: ADBannerView!) { adBannerView.hidden = false } //BannerView failed to load func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { adBannerView.hidden = true } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. loadAds() //(rest of the code is from here onwards)

Intenté agregar esto para detener el primer error: (no ha funcionado)

//BannerView will disappear override func viewWillDisappear(animated: Bool) { adBannerView.removeFromSuperview() adBannerView.delegate = nil }


El problema es que cada vez que carga su vista está creando una nueva instancia de ADBannerView . Lo que debemos hacer es crear un ADBannerView una vez en nuestro AppDelegate.swift y luego presentar este ADBannerView en las vistas en las que nos gustaría tener un banner de iAd. Esto también se llama un banner de iAd compartido . En este ejemplo, creé un ADBannerView en mi AppDelegate.swift y luego lo agregué a la vista de mi ViewController.swift .

AppDelegate.swift

import UIKit import iAd // Import iAd @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, ADBannerViewDelegate { // Include the delegate for our banner var window: UIWindow? var adBannerView = ADBannerView() // Create our one ADBannerView func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Set delegate and hide banner initially adBannerView.delegate = self adBannerView.hidden = true return true } func bannerViewDidLoadAd(banner: ADBannerView!) { print("bannerViewDidLoadAd") adBannerView.hidden = false } func bannerViewActionDidFinish(banner: ADBannerView!) { print("bannerViewActionDidFinish") } func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { print("didFailToReceiveAdWithError: /(error)") adBannerView.hidden = true }

ViewController.swift

import UIKit class ViewController: UIViewController { let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate // Create reference to our app delegate override func viewWillAppear(animated: Bool) { // Position appDelegate.adBannerView.center = CGPoint(x: view.frame.midX, y: view.frame.height - appDelegate.adBannerView.frame.height / 2) // Add to view view.addSubview(appDelegate.adBannerView) }

No olvide eliminar el código de su función viewWillDisappear(animated: Bool) que agregó anteriormente. Si hace clic en el banner y luego lo descarta, se llamará a esta función y eliminar nuestro banner de nuestra vista y establecer nuestro delegado de banners igual a nulo demasiado pronto causará problemas.


Si desea que el banner persista entre las pestañas y no desaparezca al cambiar rápidamente de pestañas, debe seguir el enfoque de iAd Suite: http://developer.apple.com/library/ios/#samplecode/iAdSuite/Introduction/Intro.html (consulte el archivo BannerViewController.m, no en Swift, pero no es difícil convertirlo)

Este enfoque tampoco requiere que modifiques ninguno de los controladores de vista dentro de tus pestañas. Simplemente debe tener una relación entre el controlador de la barra de pestañas y un Controlador de vista que tenga una vista de contenedor integrada. Haz eso en tu guión gráfico. Además, debe configurar la Clase personalizada en BannerViewController para cada pestaña e incrustar su contenido en la vista incrustada. Eche un vistazo a esta publicación para obtener detalles sobre cómo hacerlo en el Guión gráfico: https://.com/a/16205420/5007500

Si no está utilizando Storyboard, debe configurar BannerViewController como controlador de vista principal para cada una de sus pestañas.


Si no desea preocuparse por el tamaño, la posición, el manejo de errores y los métodos delegados de su anuncio publicitario, también puede usar:

self.canDisplayBannerAds = true

Esto resolvió el error en mi aplicación, porque Apple también se preocupa por la cantidad de instancias

He escrito un breve tutorial sobre esto: link