2017-01-02 175 views
0

我有一個buttontimingView,按鈕本身就說明,當計時器啓動時左:按鈕被刪除

func startTiming(button: UIButton, duration: Double, timingView: UIView?) { 

    var duration = duration 
    button.setTitle(String(Int(duration)), for: .normal) 
    let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) {_ in 
     if duration > 0 { 
      duration -= 1 
      button.setTitle(String(Int(duration)), for: .normal) 
     } 
    } 

    DispatchQueue.main.asyncAfter(deadline: .now() + duration) { 
     timer.invalidate() 
     if timingView != nil { 
      timingView?.removeFromSuperview() 
     } 
    } 
} 

而且timingView被刪除,每當用戶在計時過程水龍頭button

func cancelAbilityTiming(sender: UIButton) { 
    sender.superview!.superview!.removeFromSuperview() 

    // remove timingView from superview 
} 

我期待timingView及其所有子視圖得到去除每個定時器被取消的時間,但是,如果我取消計時器,然後重新啓動它,就會有2個定時器正在進行的同一時間(按鈕標籤每秒更換兩次,以不同的數字),我該如何避免出現這種情況?

編輯:

enter image description here

+0

你確定你已經放置的時間視圖內的按鈕? –

+0

@MidhunMP是我在界面構建器中做過 –

+0

檢查它是否正確放置在定時視圖中,如果可能請分享一下ib樹形結構? –

回答

0

timer爲全局變量。在初始化之前,請檢查timer是否爲nil。在timer.invalidate()之後寫timer = nil

0

我真的不喜歡強拆superview。相反,你可以做這樣的事情。

給你的標籤timingView,並確保它在超級視圖中是唯一的。 例如

timingView.tag = 99 

並確保button新增爲timingView一個子視圖,如果它不是通過故事板完成的。

修改您cancelAbilityTiming()

func cancelAbilityTiming(sender: UIButton) { 
    for subview in self.view.subviews { 
     if subview.tag == 99 { 
      //Removing timingView 
      subview.removeFromSuperview() 
     } 

    } 
}