斯威夫特

斯威夫特

问题描述:

创建一个倒数计时器我已经写了这个代码,倒计时到一个特定的日期。斯威夫特

我将如何让这个倒计时的每一个元素在一个单独的标签显示。

所以我有一个标签,显示的天数,标签显示的小时数,标签显示分钟数和标签显示的秒数。

代码:

class ViewController: UIViewController { 

@IBOutlet weak var dateLabelOutlet: UILabel! 

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: "25/12/16 00:00:00") 
    let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

    dateLabelOutlet.text = "\(timeDifference.day!) Days \(timeDifference.hour!) Hours \(timeDifference.minute!) Minutes \(timeDifference.second!) Seconds" 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

+0

既然你已经分离的组分,创建丢失的3个标签,分别分配的组件。 – vadian

你的代码已经计算DateComponents的差异,然后建立与日,小时,分钟和秒的差异组合的字符串。

只是改变这一行:

dateLabelOutlet.text = "\(timeDifference.day!) Days \(timeDifference.hour!) Hours \(timeDifference.minute!) Minutes \(timeDifference.second!) Seconds" 

你需要创建4个标签,将timeDifference.day于一体,timeDifference.hour在另一个,在第三timeDifference.minute,并timeDifference.second在第四标签。

如果你写的代码,我觉得这将是明显的 - 或者是别人的代码,你复制/粘贴?

+0

谢谢我早些时候尝试过,但我得到了一个错误,导致模拟器每次载入应用程序时崩溃。但这一次它的工作 –

+0

好的,这是一个单独的问题。当你有这样的问题时,要尝试的就是退出Xcode和模拟器并重启它们,或者从项目菜单中选择“clean”。 –