2017-11-20 3 views
0

QuartzCore를 사용하여 스톱워치 표시를 00:00:00부터 시작할 수있는 방법을 찾을 수 없습니다. 항상 07:00:00에 시작합니다.Swift에서 기본값 07:00:00 대신 00:00:00으로 elapsedTime을 시작하는 방법

시작 시간의 서식을 00:00:00으로 지정하는 방법이 있습니까? 코드는 다음과 같습니다.

감사합니다.

클래스 : 아래의 코멘트에 언급 한 바와 같이 시정

import Foundation 
import QuartzCore 

class StopWatch: NSObject{ 

private var displayLink: CADisplayLink! 
private let formatter = DateFormatter() 

var callback: (() -> Void)? 
var elapsedTime: CFTimeInterval! 

override init() { 
    super.init() 
    self.displayLink = CADisplayLink(target: self, selector: #selector(tick(sender:))) 
    displayLink.isPaused = true 
    displayLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes) 
    self.elapsedTime = 0.0 
    formatter.dateFormat = "HH:mm:ss" 
} 
convenience init(withCallback callback: @escaping() -> Void) { 
    self.init() 
    self.callback = callback 
} 
deinit { 
    displayLink.invalidate() 
} 

func tick(sender: CADisplayLink) { 
    elapsedTime = elapsedTime + displayLink.duration 
    callback?() 
} 


func elapsedTimeAsString() -> String { 
    return formatter.string(from: Date(timeIntervalSinceReferenceDate:elapsedTime)) 
} 

} 
+2

시간대 문제와 비슷합니다. GMT + 7에 계시나요? 포맷터의 시간대를 GMT로 설정하십시오. – Thilo

+0

포인터를 보내 주셔서 감사합니다. formatter.timeZone = NSTimeZone (이름 : "GMT")을 추가했습니다! as TimeZone – Starkus

답변

1

: 나는 GMT +7에 위치하고 있기 때문에 언급 위의 주석으로 는,이 시간대의 문제가 있었다. 문제를 해결하기 위해 다음 코드를 추가했습니다.

formatter.timeZone = TimeZone (약어 : "GMT")!

+2

네이티브 스위프트 구조체에'TimeZone (약어 : "GMT") 브릿지와 함께'NS ...'클래스를 사용하지 마십시오! – vadian

+0

감사합니다. – Starkus

관련 문제