预加载纹理地图集完成处理程序无法正常工作

时间:2016-04-13 08:21:46

标签: swift uiimageview texture-atlas

我有一个UIImageView供用户查看(看起来几乎像一个闪屏),以便我可以预加载我的纹理地图集。

但似乎在完成块中,即使我说'removefromsuperview',它也不会这样做。

我知道纹理已经完成加载,因为如果我点击屏幕,UIImageView就会消失并且我的游戏开始了,但是由于某些奇怪的原因它不会自行消失。

这是我在GameViewController中的viewDidLoad:

//Configure the View
    let skView = view as! SKView

    skView.multipleTouchEnabled = false
    self.view.exclusiveTouch = false

    //Create and Configure the scene
    scene = GameScene(size: skView.bounds.size)

    scene.scaleMode = .AspectFill

    //Load "SPLASH SCREEN"
    let image: UIImage = UIImage(named: "ViewControllerImage")!
    GameViewController.splashView = UIImageView(image: image)
    GameViewController.splashView!.frame = CGRectMake(0,0,self.view.bounds.width,self.view.bounds.height)
    self.view.addSubview(GameViewController.splashView!)




SKTextureAtlas.preloadTextureAtlases([GameViewController.diploTextureAtlas,GameViewController.bieberTextureAtlas,GameViewController.skrillexTextureAtlas,GameViewController.sunTextureAtlas], withCompletionHandler: { () -> Void in

        print("Completo")
        GameViewController.splashView?.removeFromSuperview()
        skView.presentScene(self.scene)

    })

1 个答案:

答案 0 :(得分:0)

试试这段代码:

//Configure the View
    let skView = view as! SKView

    skView.multipleTouchEnabled = false
    self.view.exclusiveTouch = false

    //Create and Configure the scene
    scene = GameScene(size: skView.bounds.size)

    scene.scaleMode = .AspectFill

    //Load "SPLASH SCREEN"
    let image: UIImage = UIImage(named: "ViewControllerImage")!
    GameViewController.splashView = UIImageView(image: image)
    GameViewController.splashView.tag = 666
    GameViewController.splashView!.frame = CGRectMake(0,0,self.view.bounds.width,self.view.bounds.height)
    self.view.addSubview(GameViewController.splashView!)




SKTextureAtlas.preloadTextureAtlases([GameViewController.diploTextureAtlas,GameViewController.bieberTextureAtlas,GameViewController.skrillexTextureAtlas,GameViewController.sunTextureAtlas], withCompletionHandler: { () -> Void in

        print("Completo")
        for view in self.view!.subviews {
            if view.tag == 666 {
               view.removeFromSuperview()
            }
        }
        skView.presentScene(self.scene)

    })

您也可以使用以下方式更改周期:

if let viewWithTag = self.view.viewWithTag(666) {
        viewWithTag.removeFromSuperview()
}