我需要能够记录反应时间,从屏幕加载或问题标签刷新到用户点击数字按钮.我没有找到Apple提供的文档,对此非常有帮助.NSDate不够准确,我需要至少测量到几毫秒.mach_absolute_time似乎受到游戏设计师的青睐,因为它在内部是一致的,但它不适用于这个应用程序,因为我需要跨设备比较数据,并且mach_absolute_time是CPU相关的时间.Apple Dev Q&A建议使用NanosecondsToAbsolute,DurationToAbsolute但它在obj-c中,我找不到快速的等效文档.
是否有一个快速的版本NanosecondsToAbsolute,并DurationToAbsolute说我只是没有找到?还有其他一些方法吗?
这是我试图将时间添加到的代码:
class EmotionQuestionsViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
//mark "startTime" when view loads
}
@IBOutlet var questionLabel: UILabel!
var timeResultsStack = [String]()
var questionsStack = ["HAPPY", "ANXIOUS"]
var questionResultsStack = [String]()
var questionStackArrayIndex = 1
@IBAction func RecordValueFromNumericalScaleOneToSeven(sender: UIButton) {
//mark durration time as currentTime - startTime, append to timeResultsStack
let value = sender.currentTitle!
questionResultsStack.append(value)
if questionResultsStack.count < questionsStack.count{
self.questionLabel.text = "how \(questionsStack[questionStackArrayIndex]) are you right now?"
//mark startTime when label is changed
self.questionStackArrayIndex++
}
else{
self.performSegueWithIdentifier("showResults", sender: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 16
如前所述,精度NSDate()可能足以达到您的目的.仅仅为了完整起见,mach_absolute_time()引用的 技术问答QA1398也
适用于Swift:
let t1 = mach_absolute_time()
// do something
let t2 = mach_absolute_time()
let elapsed = t2 - t1
var timeBaseInfo = mach_timebase_info_data_t()
mach_timebase_info(&timeBaseInfo)
let elapsedNano = elapsed * UInt64(timeBaseInfo.numer) / UInt64(timeBaseInfo.denom);
print(elapsedNano)
Run Code Online (Sandbox Code Playgroud)
这种方法的可能优点:
mach_absolute_time()似乎比调用
快得多NSDate().timeIntervalSinceReferenceDate,因此这种方法可能更适合测量极短的间隔.NSDate()如果调整时钟,则更改
的值mach_absolute_time()不存在此问题.| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |