2017-05-14 20 views
1

マイナスボタンを押すまで、何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も騒音を出そうとしています。私が持っている唯一の問題は、マイナスボタンをクリックすることができないということです。マイナスボタンはプラスボタンが押されたままであるからです。それは、ループから抜けることができないために押されたままです。すでに答えに感謝!ループを速く止める方法3

import UIKit 
import AVFoundation 
import AudioToolbox 
import Foundation 

class ViewController: UIViewController { 
    @IBOutlet weak var telLabel: UILabel! 

    var number = 0 
    var timeline = "no" 

    @IBAction func plus(_ sender: Any) { 
     number += 1 
     telLabel.text = "\(number)" 
     timeline = "yes" 
     tijdlijn() 
    } 

    func tijdlijn(){ 
     while timeline == "yes"{ 
      AudioServicesPlaySystemSound(SystemSoundID(1103)) 
      sleep(2) 
     } 
    } 

    /* if timeline = "yes"{ 
    repeat{ 
     AudioServicesPlaySystemSound(SystemSoundID(1103)) 
     sleep(3) 
    } while timeline == "yes" 
    */ 

    //4095 
    @IBAction func min(_ sender: Any) { 
     number -= 1 
     telLabel.text = "\(number)" 
     timeline = "no" 
    } 
} 
+1

あなたはどのループについて話していますか? –

+0

**メインスレッドでは決して**スリープを使用しないでください。 – rmaddy

答えて

1

このようなタスクには、Timerを使用することをおすすめします。これを使用してみてください:

@IBOutlet weak var telLabel: UILabel! 

var number = 0 

var timeline = false 

var timer: Timer! 

@IBAction func plus(_ sender: Any) { 

    timeline = !timeline 

    if timeline { 
     number += 1 
     timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(self.tijdlijn), userInfo: nil, repeats: true) 

    } else { 
     number -= 1 

     timer.invalidate() 
    } 

    telLabel.text = "\(number)" 
} 

func tijdlijn(){ 
    AudioServicesPlaySystemSound(SystemSoundID(1103)) 
} 

1つのアクションtouchupinside - func plusを使用してください。マイナスtouchupinsideアクションを削除します。

0

timelineをあなたのクラスのプロパティにすることができます。アクセスはself.timelineです。これにより、クラス内でアクセスすることができます。 timelineが不一致になると、ループは停止します。

関連する問題