2016-08-02 4 views
0

NSTimer에서 시간 간격을 어떻게 바꿀 수 있습니까?Swift NSTimer 동적으로 변경되는 간격

var difficulty: Double = 1.0 

override func viewDidLoad() { 
    super.viewDidLoad() 

    _ = NSTimer.scheduledTimerWithTimeInterval(difficulty, target: self, selector: #selector(hideAllBtns), userInfo: nil, repeats: true) 

} 

나는 hideallbuttons에서 매번 호출 된 switch 문을 실행 한 다음 어려움을 업데이트합니다.

func getDifficulty (score : Double) -> Double { 

    switch score { 

    case 0...100: return(1.0) 
    case 100...200: return (0.8) 
    case 200...300: return (0.5) 
    case 300...400: return (0.2) 
    default: return (1.0) 

    } 
} 

그러나 NSTimer 내가 먼저 실행하고 그 값에 스틱시 복사본을 생성 가정 1.0s에서 발사 계속, 나는 타이머 호출에서 변수를 만들려고했지만 그 작동하지 않습니다.

타이머가 작동하는 속도를 동적으로 조정하는 간단한 방법이 있습니까?

이것은 아직 배우고있는 연습 프로젝트 일 뿐이므로 내가하는 일을 구조화하는 데 훨씬 좋은 방법이 있음을 이해합니다. 나는 동적으로 조정하는 타이머가 미래의 사용에 유용 할 것이라고 생각한다.

+0

'NSTimer'는 repeat : true로 설정됩니다. 그러면 1 초만 반복됩니다. 난이도와 반복 정도에 따라 기간을 설정해야합니다. 메서드를 호출하여 타이머를 시작하고 'hideAllBtns' 메서드를 호출하여 난이도에 따라 타이머를 다시 시작 (즉, 시작)해야합니다. 신속한 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID259에서 getters 및 setter를 만드는 방법도 확인하십시오. – Asdrubal

+0

"이것은 단지 연습 프로젝트입니다."묻기 전에 찾기 연습을 할 수있는 좋은 기회입니다. – matt

답변

2

타이머를 실행하면 실행할 수 없습니다.

내가 정확히 당신이 필요 확실하지 오전하지만 당신은 두 가지 옵션이 있습니다

  1. 타이머를 무효화하고 새로운 시간 간격으로 새로 화재, 당신도 수업 시간에 타이머를 선언 할 수 있습니다 무효화 한 후에 값을 무시하십시오.

  2. 반복 값을 false로 설정하고 매번 새 타이머를 시작하십시오.

이 예를 살펴 :이 생성 된 후에는

class ViewController: UIViewController { 
    var difficulty: Double = 1.0 
    var timer = NSTimer() 

    override func viewDidLoad() { 
     activateTimer() 
    } 

    func activateTimer(){ 
     NSTimer.scheduledTimerWithTimeInterval(difficulty, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true) 
    } 

    func timerMethod() { 
     print("Timer method called") 
    } 

    func endTimer() { 
     timer.invalidate() 
    } 

    func increaseDifficulty() { 
     difficulty = 2.0 
     endTimer() 
     activateTimer() 
    } 

} 
0

당신은 NSTimer 개체의 간격을 변경할 수 없습니다.

이 문제를 해결하려면 타이머가 작동하는 속도를 높이고 원하는 시간이 경과했는지 수동으로 확인하십시오. 이렇게하면 동적으로 업데이트되는 시간을 동적 타이머를 모방하여 정의 할 수 있습니다.

var lastTriggered: NSDate! 
var dynamicInterval = 1.0 
var timerInterval = 0.1 

override func viewDidLoad() { 
    super.viewDidLoad() 

    lastTriggered = NSDate() 
    _ = NSTimer.scheduledTimerWithTimeInterval(timerInterval, target: self, selector: #selector(hideAllBtns), userInfo: nil, repeats: true) 
} 

func hideAllBtns() { 
    let currentDate = NSDate() 
    if(currentDate.timeIntervalSinceDate(lastTriggered) >= dynamicInterval) { 
     // This will only be called every dynamicInterval seconds 
     // Now call getDifficulty and/or update your dynamicInterval 
     lastTriggered = currentDate 
    } 
}