Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何用定时器显示图像_Ios_Swift - Fatal编程技术网

Ios 如何用定时器显示图像

Ios 如何用定时器显示图像,ios,swift,Ios,Swift,我想显示图像3.0秒,并将在3秒后关闭 我写的代码可以做到这一点,但它不适合我,我想知道为什么,我的问题是否有解决方案 主场景: var myTimer: NSTimer? var imageView: UIImageView? var IsShowing = false override func didMoveToView(view: SKView) { let defaults = NSUserDefaults.standardUse

我想显示图像3.0秒,并将在3秒后关闭

我写的代码可以做到这一点,但它不适合我,我想知道为什么,我的问题是否有解决方案

主场景:

 var myTimer: NSTimer?
   var imageView: UIImageView?


    var IsShowing = false

    override func didMoveToView(view: SKView) {

            let defaults = NSUserDefaults.standardUserDefaults()
            if defaults.stringForKey("isAppAlreadyLaunchedOnce") != nil{
                print("App already launched")

                //Do Somthing
            } else {
                defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
                myTimer = NSTimer.scheduledTimerWithTimeInterval(
                    3.0, target: self, selector: #selector(MainScene.SetImage), userInfo: nil, repeats: false)
                backgroundImage.hidden = false
                print("App First launched")
            }


            backgroundImage = SKSpriteNode(imageNamed: "Image")
            backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
            backgroundImage.size = CGSizeMake(self.size.width, 580)
            addChild(backgroundImage)


}

      func SetImage() {

    backgroundImage = SKSpriteNode(imageNamed: "Image")
    backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
    backgroundImage.size = CGSizeMake(self.size.width, 580)
    addChild(backgroundImage)


    if IsShowing == true {
        backgroundImage.hidden = false
    }else {
       backgroundImage.hidden = true
    }

}

要启动计时器,您需要
myTimer.fire()
,但也需要
self.performSelectorAfterDelay

 override func didMoveToView(view: SKView) {

        let defaults = NSUserDefaults.standardUserDefaults()

        if defaults.stringForKey("isAppAlreadyLaunchedOnce") != nil{
            print("App already launched")
        } 
        else {

            backgroundImage = SKSpriteNode(imageNamed: "Image")
            backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
            backgroundImage.size = CGSizeMake(self.size.width, 580)
            addChild(backgroundImage)

            defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")

            self.performSelector(#selector(MainScene.hideImage), withObject: nil, afterDelay: 3.0)
            print("App First launched")
       }
}

  func hideImage() {

    backgroundImage.hidden = true

}
或者使用当前版本

override func didMoveToView(view: SKView) {

        let defaults = NSUserDefaults.standardUserDefaults()
        if defaults.stringForKey("isAppAlreadyLaunchedOnce") != nil{
            print("App already launched")

            //Do Somthing
        } else {
            defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
            myTimer = NSTimer.scheduledTimerWithTimeInterval(
                3.0, target: self, selector: #selector(MainScene.SetImage), userInfo: nil, repeats: false)
            myTimer.fire() // <----- Add this


            backgroundImage.hidden = false // this probably does nothing
            print("App First launched")
        }


        backgroundImage = SKSpriteNode(imageNamed: "Image")
        backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
        backgroundImage.size = CGSizeMake(self.size.width, 580)
        addChild(backgroundImage)

        backgroundImage.hidden = true // seems to hide the image as soon as it's created
}
覆盖func didMoveToView(视图:SKView){
让defaults=NSUserDefaults.standardUserDefaults()
如果默认值为.stringForKey(“IsAppalReadyLancedonce”)!=nil{
打印(“应用程序已启动”)
//干坏事
}否则{
defaults.setBool(true,forKey:“IsAppalReadyLancedonce”)
myTimer=NSTimer.scheduledTimerWithTimeInterval(
3.0,目标:self,选择器:#选择器(mainsecene.SetImage),userInfo:nil,repeats:false)

myTimer.fire()//要启动计时器,您需要
myTimer.fire()
但也需要
self.performSelectorAfterDelay
在这种情况下可以工作

 override func didMoveToView(view: SKView) {

        let defaults = NSUserDefaults.standardUserDefaults()

        if defaults.stringForKey("isAppAlreadyLaunchedOnce") != nil{
            print("App already launched")
        } 
        else {

            backgroundImage = SKSpriteNode(imageNamed: "Image")
            backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
            backgroundImage.size = CGSizeMake(self.size.width, 580)
            addChild(backgroundImage)

            defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")

            self.performSelector(#selector(MainScene.hideImage), withObject: nil, afterDelay: 3.0)
            print("App First launched")
       }
}

  func hideImage() {

    backgroundImage.hidden = true

}
或者使用当前版本

override func didMoveToView(view: SKView) {

        let defaults = NSUserDefaults.standardUserDefaults()
        if defaults.stringForKey("isAppAlreadyLaunchedOnce") != nil{
            print("App already launched")

            //Do Somthing
        } else {
            defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
            myTimer = NSTimer.scheduledTimerWithTimeInterval(
                3.0, target: self, selector: #selector(MainScene.SetImage), userInfo: nil, repeats: false)
            myTimer.fire() // <----- Add this


            backgroundImage.hidden = false // this probably does nothing
            print("App First launched")
        }


        backgroundImage = SKSpriteNode(imageNamed: "Image")
        backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
        backgroundImage.size = CGSizeMake(self.size.width, 580)
        addChild(backgroundImage)

        backgroundImage.hidden = true // seems to hide the image as soon as it's created
}
覆盖func didMoveToView(视图:SKView){
让defaults=NSUserDefaults.standardUserDefaults()
如果默认值为.stringForKey(“IsAppalReadyLancedonce”)!=nil{
打印(“应用程序已启动”)
//干坏事
}否则{
defaults.setBool(true,forKey:“IsAppalReadyLancedonce”)
myTimer=NSTimer.scheduledTimerWithTimeInterval(
3.0,目标:self,选择器:#选择器(mainsecene.SetImage),userInfo:nil,repeats:false)

myTimer.fire()//您不需要定时器,这可以通过简单的GCD调用实现

override func didMoveToView(view: SKView) {

    let defaults = NSUserDefaults.standardUserDefaults()
    if defaults.stringForKey("isAppAlreadyLaunchedOnce") == nil {
        defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")   
        displayBackgroundImageForSeconds(3)
        print("App First launched")
    }

}

func displayBackgroundImageForSeconds(seconds: Int) {
    backgroundImage = SKSpriteNode(imageNamed: "Image")
    backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
    backgroundImage.size = CGSizeMake(self.size.width, 580)
    addChild(backgroundImage)   
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds) * Int64(NSEC_PER_SEC))
    dispatch_after(time, dispatch_get_main_queue(), { backgroundImage.hidden = true })           
}

你不需要定时器,这可以通过简单的GCD调用来实现

override func didMoveToView(view: SKView) {

    let defaults = NSUserDefaults.standardUserDefaults()
    if defaults.stringForKey("isAppAlreadyLaunchedOnce") == nil {
        defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")   
        displayBackgroundImageForSeconds(3)
        print("App First launched")
    }

}

func displayBackgroundImageForSeconds(seconds: Int) {
    backgroundImage = SKSpriteNode(imageNamed: "Image")
    backgroundImage.position = CGPointMake(self.size.width/2, self.size.height/2)
    backgroundImage.size = CGSizeMake(self.size.width, 580)
    addChild(backgroundImage)   
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds) * Int64(NSEC_PER_SEC))
    dispatch_after(time, dispatch_get_main_queue(), { backgroundImage.hidden = true })           
}

图像没有显示你到底想实现什么?你是否总是显示图像,但如果不是第一次自动隐藏它?或者你的逻辑是什么?@ogres我尝试在应用程序第一次打开3秒钟时查看图像,然后图像会自动消失。如果不是,图像会出现吗第一次?图像没有显示你到底想实现什么?你总是显示图像,但如果不是第一次自动隐藏它?或者你的逻辑是什么?@ogres我尝试在应用程序第一次打开3秒钟后查看图像,然后图像会自动消失。图像会出现吗ar如果这不是第一次?你是什么意思?我的代码现在不工作。我无法显示我的图像。在这种情况下,你可能会遇到与计时器无关的另一个问题。请参阅代码中的注释。你的意思是什么?我的代码现在不工作。我无法显示我的图像。在这种情况下,你可能会遇到与计时器无关的另一个问题。请参阅代码中的注释E