2016-12-16 5 views
1

ich eine Reihe von Grundeinstellungen in der viewDidLoad haben:Halten Aktualisierung NSTimer Etikett nach segue

countDownLabel.alpha = 1 
    countDownLabel.text = "01:30" 
    swipeLeft.alpha = 0 
    swipeRight.alpha = 0 
    pressPlayToStartOr.alpha = 0 
    swipeToChangeTheSeq.alpha = 0 
    countDownPauseLbl.alpha = 0 

Ich habe eine NSTimer (Ich habe auch setzen func update() des Timers innerhalb innen viewDidLoad, während Es wird durch eine UIButton außerhalb von viewDidLoad) ausgelöst. Der Timer läuft weiter, wenn ich vom UI-View-Controller aus gehe. Wenn ich zum Timer View Controller zurückwechsle, höre ich das Geräusch des laufenden Timers, aber der Timer View Controller wird auf seinen ursprünglichen Zustand aktualisiert und Sie können den Timer erneut ausführen, so dass sie sich überlappen. Der programmatische Übergang nach dem Ende des Timers funktioniert in diesem Fall nicht. Ich verstehe, dass ich den falschen Ansatz verwendet habe, hoffe aber, dass es behoben werden kann. Wie kann ich das Label aktualisieren, unabhängig davon, wo ich in der App bin?

+1

den "Timer" zu einem Singleton machen. – aircraft

+0

Danke aber als Anfänger brauche ich ein paar Details. Dies stellte ich als Singleton-Codeklasse fest Singleton {static let sharedInstance = Singleton()} Wie soll ich den Timer integrieren? –

Antwort

1

Der Effekt:

the result

In SingletonTimer.swift:

// 
// SingletonTimer.swift 
// testSwiftUITextField 
// 
// Created by leo on 2016/12/17. 
// Copyright © 2016年 leo. All rights reserved. 
// 

import UIKit 

class SingletonTimer: NSObject { 

private static let sharedInstance = SingletonTimer() 
class var sharedSingletonTimer:SingletonTimer { 

    return sharedInstance 
} 

var timeCount:Int = 100 

func countDown() { 

    timeCount -= 1 
    timer_closure(timeCount) 
} 

lazy var timer:Timer = { 

    var timer:Timer 

    if #available(iOS 10.0, *) { 
     timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { (timer) in 

      self.countDown() 
     }) 
    } else { 
     // Fallback on earlier versions 

     timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(countDown), userInfo: nil, repeats: true) 
    } 

    return timer 
}() 

var timer_closure:(Int)->Void = { (count) in 

} 

} 

In ViewController.swift:

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var label: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

} 

In ViewController2.swift:

import UIKit 

class ViewController2: UIViewController { 


@IBOutlet weak var label: UILabel! 

var timer:Timer? = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 

    timer = SingletonTimer.sharedSingletonTimer.timer 
    SingletonTimer.sharedSingletonTimer.timer_closure = { (timeCount) in 

     print("\(timeCount)") 
     self.label.text = "\(timeCount)s !" 
    } 

    if timer != nil { 
     timer?.fire() 
    } 
} 

} 
+0

Das habe ich gebraucht. Danke für deine Zeit. –