【问题标题】:Preload Texture Atlases Completion Handler not working预加载纹理图集完成处理程序不起作用
【发布时间】:2016-04-13 17:54:09
【问题描述】:

我有一个 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)

    })

【问题讨论】:

    标签: swift uiimageview texture-atlas


    【解决方案1】:

    试试这个代码:

    //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()
    }
    

    【讨论】:

    • 啊不,这似乎不起作用。为了从屏幕上删除启动视图,出于某种原因,我仍然需要点击屏幕,由于某种原因,它在纹理加载后不会消失。当我点击以摆脱启动画面时,这也会启动我的游戏,就好像启动画面在我的 GameScene 上一样。很奇怪
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    相关资源
    最近更新 更多