2017-01-01 11 views
-5

以下のマイコードはタイマーです。 2秒に達するとボタンが表示されます。今すぐボタンを押すと、永遠に消えます。 10秒後にボタンが再表示されます。 10秒が経過した後、2と9の範囲内でボタンを選択すると、ボタンを消す動作を無効にしたいと思います。だから誰かが2〜9秒の間にボタンを押すと。 10秒後に自動的にボタンが再表示されます。あなたはこの一度if elseステートメントを使用してボタンアクションをオーバーライドする方法。

Rest.isHidden = true 

を隠し、再びそれを示さないため

import UIKit 
class ViewController: UIViewController { 
@IBOutlet var Rest: UIButton! 
@IBOutlet var start: UIButton! 
var timer = Timer() 
var counter = 0.0 
var isRunning = false 

@IBOutlet var dx: UILabel! 
override func viewDidLoad() { 
super.viewDidLoad() 
     dx.text = "\(counter)" 
start.isEnabled = true 
    } 
@IBAction func play(_ sender: Any) { 
if !isRunning{ 
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true) 



    start.isEnabled = false 

    isRunning = true 
    }} 
@IBAction func disaper(_ sender: Any) { 

Rest.isHidden = true 

} 


func updateTimer(){ 
counter += 0.1 

dx.text = String(format: "%.1f", counter) 


if counter > 2 && counter < 9 
{ 
    Rest.alpha = 1 
    Rest.isEnabled = true 


} else if counter > 10 { 
    Rest.alpha = 1 
    Rest.isEnabled = true 
} 

else { 
    return 
    Rest.alpha = 0 
    Rest.isEnabled = false 

}}} 
+0

あなたのコードとあなたの説明はどちらも文字化けしています。現在のコードは2-9秒と9-10秒の間に異なるロジックを持っていますが、2つのロジックブロックは同じことをします。現在のタイマーコードは、ボタンを0秒から2秒まで隠し、2〜9秒と9〜10秒の間に表示&有効にしてから、10秒後に非表示にします。タイマーはIBactionの 'play'で始めるだけですが、そのアクションがどのボタンに接続されているかはわかりません。 –

+0

「休憩」と呼ばれるフィールドを隠す別のアクション「disaper」がありますが、タイマーでは何もしません。 2つの異なるボタン、開始ボタンと休止ボタンがありますか? 'Rest'ボタンは非表示にする必要がありますか? –

+0

質問を再投稿しないでください。必要に応じて、前の質問を更新します。 – rmaddy

答えて

0

あなたのボタンは永遠に消えます。 このボタンのalpha/isEnabledを管理しても、描画されていないため視覚的に影響しません。

ボタンロジックが間違っているように見えますが。

また、あなたはあなたのカウンターをリセットしないと、あなたはどちらかそれを各10秒をリセットする必要があり、またはあなたは私が右の場合は10

if counter.divided(by: 10) > someValue { ... } 

で割ることに達する必要がありますので、そのためには、以上を超える増加とされています理解し、あなただけが必要なもの、そのクリックの10秒後に再表示ボタンであり、あなたのようなものを使用する必要がありますあなただけ(0.0)透明にボタンのアルファを設定した場合、を覚え

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet var Rest: UIButton! 
    @IBOutlet var start: UIButton! 
    @IBOutlet var dx: UILabel! 

    var timer: Timer? 
    var isRunning: Bool { 
     get { 
      // if you ever pressed the button, then after everytime the timer will be present 
      return timer != nil 
     } 
    } 
    var counter = 0.0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     dx.text = String(format: "%.1f", counter) 

     // enable only if you disabled it in XIB/Storyboard, otherwise just remove the line below 
     start.isEnabled = true 
    } 

    @IBAction func play(_ sender: Any) { 
     if isRunning { 
      // we already disable the button, but who knows what code will be after? 
      // maybe once in future you will re-enable it accidentally 
      return 
     } 

     refreshTimer() 
    } 

    @IBAction func disaper(_ sender: Any) { 
     // hide button when it's clicked 
     Rest.isHidden = true 

     // refresh timer/game/whatever 
     refreshTimer() 

     // setup this block to fire after 10 seconds from now 
     DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) { [weak self] in 
      // only use self as weak reference for cases if user would like to go back from screen 
      // or this won't deallocate the screen 
      if let `self` = self { 
       // return button's vision 
       self.Rest.isHidden = false 
      } 
     } 
    } 

    func refreshTimer() { 
     // invalidate timer if it exists 
     if let timer: Timer = timer { 
      timer.invalidate() 
     } 

     // setup new timer 
     timer = Timer.scheduledTimer(timeInterval: 0.1, 
            target: self, 
            selector: #selector(updateTimer), 
            userInfo: nil, repeats: true) 

     start.isEnabled = false 
    } 

    func updateTimer() { 
     counter += 0.1 
     dx.text = String(format: "%.1f", counter) 
    } 
} 

を、これはclickeすることができますとにかくそれは目に見えません!

関連する問題