2017-06-11 2 views
0

私はSwiftとiOS開発の新人です。私は特定の日付のカウントダウンを試みています。 iOSのカウントダウンアプリは、ゼロの後にマイナスにカウントされます。私はゼロで停止したい。これをどうやって解決するのですか?カウントダウンを0にする方法は? - Swift

let currentDate = Date() 
let dateFormatter = DateFormatter() 

let userCalendar = Calendar.current 

let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true) 
    timer.fire() 



} 

func printTime() 
{ 
    dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 
    let startTime = Date() 
    let endTime = dateFormatter.date(from: "11/03/18 10:00:00") 

    let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 


    dayLabel.text = "\(time.day!)" 
    hourLabel.text = "\(time.hour!)" 
    minuteLabel.text = "\(time.minute!)" 
    secondLabel.text = "\(time.second!)" 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

}

答えて

0

変更してみてください:

dayLabel.text = "\(time.day!)" 
hourLabel.text = "\(time.hour!)" 
minuteLabel.text = "\(time.minute!)" 
secondLabel.text = "\(time.second!)" 

へ:

if startTime < endTime { 
    dayLabel.text = "\(time.day!)" 
    hourLabel.text = "\(time.hour!)" 
    minuteLabel.text = "\(time.minute!)" 
    secondLabel.text = "\(time.second!)" 
} else { 
    dayLabel.text = "0" 
    hourLabel.text = "0" 
    minuteLabel.text = "0" 
    secondLabel.text = "0" 
} 

そして、あなたの状況に応じて、あなたがそうのようtimer.invalidate()でタイマーを停止する場合があります

... 

var timer: Timer? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true) 
    timer?.fire() 

} 

func printTime() { 

    ... 

    } else { 
     ... 
     timer?.invalidate() 
    } 
} 
+0

ありがとうございました!出来た。 –

+0

@ F.Lale大歓迎です! – LWJ

+1

タイマーを止めるのも忘れていますtimer.invalidate() –

0
let currentDate = Date() 
let dateFormatter = DateFormatter() 
var timer = Timer() 
let userCalendar = Calendar.current 

let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

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



} 

func printTime() 
{ 
    dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 
    let startTime = Date() 
    let endTime = dateFormatter.date(from: "11/03/18 10:00:00") 

    let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

    if time.day! == 0 && time.hour! == 0 && time.minute! == 0 && time.second! == 0 {timer.invalidate()} 

    dayLabel.text = "\(time.day!)" 
    hourLabel.text = "\(time.hour!)" 
    minuteLabel.text = "\(time.minute!)" 
    secondLabel.text = "\(time.second!)" 
} 
関連する問題