错误无法将UIView类型的值转换为SKview [英] Error Could not cast value of type UIView to SKview

查看:173
本文介绍了错误无法将UIView类型的值转换为SKview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

自从我添加iAd以来,我一直收到此错误. 无法将类型'UIView'(0x196afa530)的值强制转换为'SKView'(0x19685f560)."

Ever since i added in iAds i keep getting this error. "could not cast value of type 'UIView' (0x196afa530) to 'SKView' (0x19685f560)."

这是失败的代码,而底部的代码是我的视图控制器代码. 我认为,这也与iAd的这段代码有关.

this is the code that fails and the code on the bottom is my inter view controller code.. which is not much. i think at also has something to do with this code for iAds.

    var interstitialAdView: UIView = UIView()

代码:

 override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
         let skView = self.view as! SKView
        self.canDisplayBannerAds = true
            skView.showsFPS = false
            skView.showsNodeCount = false
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
            let scene: SKScene = GameScene(size: skView.bounds.size)
            skView.presentScene(scene)
       }
    }

所有ViewController代码:

All ViewController code:

  import UIKit
  import StoreKit
  import SpriteKit
  import GameKit
  import iAd

 extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
        var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
        archiver.finishDecoding()
        return scene
    } else {
        return nil
    }
  }

}

class GameViewController: UIViewController, ADInterstitialAdDelegate{
var interstitialAd:ADInterstitialAd!

var interstitialAdView: UIView = UIView()
override func viewDidLoad() {
    super.viewDidLoad()


    loadInterstitialAd()

    ADBannerView()


    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!)
    {
        gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
    }




    var localPlayer = GKLocalPlayer()

    localPlayer.authenticateHandler = {(viewController, error) -> Void in

        if (viewController != nil) {
            let vc: UIViewController = self.view!.window!.rootViewController!
            vc.presentViewController(viewController, animated: true, completion: nil)
        }

        else {
            println((GKLocalPlayer.localPlayer().authenticated))

        }
    }





}
override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
         let skView = self.view as! SKView
        self.canDisplayBannerAds = true
            skView.showsFPS = false
            skView.showsNodeCount = false
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
            let scene: SKScene = GameScene(size: skView.bounds.size)
            skView.presentScene(scene)



  }

}



override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> Int {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
    } else {
        return Int(UIInterfaceOrientationMask.All.rawValue)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
}

override func prefersStatusBarHidden() -> Bool {
    return true
}

func loadInterstitialAd() {

    interstitialAd = ADInterstitialAd()

    interstitialAd.delegate = self





     }



func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) {



}



func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {







    interstitialAdView = ADBannerView()

    interstitialAdView.frame = CGRectZero

    self.interstitialAdView.frame = CGRectMake(0, self.view.frame.size.height-self.interstitialAdView.frame.size.height, self.interstitialAdView.frame.size.width, self.interstitialAdView.frame.size.height)

    interstitialAdView.backgroundColor = UIColor.clearColor()

    self.view .addSubview(interstitialAdView)





    interstitialAd.presentInView(interstitialAdView)

    UIViewController.prepareInterstitialAds()

}



func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {

    interstitialAdView.removeFromSuperview()



}



func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool {

    return true

}



func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
    println(" iAds Did Fail with Error")


}



func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {

    interstitialAdView.removeFromSuperview()

}



   }

推荐答案

我也发生了同样的事情.您要做的就是将所有iAd代码转移到GameScene.swift中,并将self更改为self.view!.window!.rootViewController!哪里有错误.

The same thing happened to me. All you have to do is transfer all your iAd code to your GameScene.swift and change self into self.view!.window!.rootViewController! wherever there is an error.

这篇关于错误无法将UIView类型的值转换为SKview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆