2017-07-31 7 views
-4

私は現在SwiftとiOSプログラミングを学んでいます。私はボタンを長押ししてタイマーを作りたいと思っています。同時に、私はUIButtonイメージを変更したいと思います。私はボタンを残す、私はボタンを元に戻したい。これは可能ですか?ボタンを長押ししてタイマーを作る方法は?

+1

友好的な提案:これが可能かどうか尋ねないでください。それをやりなさい。あなたが実際にそれを行うことによってそれを行う方法を学ぶ*あなたがそれをやっている間問題があれば、ドキュメントを読んだ後に解くことができない問題とデバッグ、Stack Overflowが正しい場所です。コードをコピー&ペーストすれば、決して学ばないでしょう。 – Moritz

+0

最初に行うべきコードを書いて問題を解決し、それを有効にするために他の人のためにここに入れてください。可能でない場合は、視覚的な表現を補うことで、それをより詳細に記述することができます。 –

答えて

0

これは絶対できます。あなたはLongPressGestureRecognizerを追加する必要があります。

let longPress = UILongPressGestureRecognizer(target: self, action: #selector(yourAction)) 
button.addGestureRecognizer(longPress) 

をしてからFUNCにタイマーを開始し、ボタンの画像変更:あなたは、このための独自のソリューション、線に沿って何かを実装する必要が

func yourAction(){ 
    Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(timerAction), userInfo: nil, repeats: false) 
    button.setImage(UIImage(named: "yourImage"), for: .normal) 
} 


func timerAction(){ 
    //Do whatever you want 
} 
+0

ありがとう!私はコードにしようとしますが、私は "あなたの行動"のタイトルを書くことは知らない。そして、プロジェクトにボタンを追加します。これは間違っていますか? @Phyber – Glenda

0

1ユーザーがタッチダウン(UIControlEvent touchDown)すると、x秒/ミリ秒ごとに起動する時間が始まります。

2タイマーは、

3 - ユーザーUICOntrolEventタッチアップを触れるのver、あなたはあなたが別の関数にこれらの2つのイベントをバインドし、起動/適切なアクションそれは

ができますどのように

であなたのタイマーを殺すあなたのタイマー

をキャンセル

デモンストレーションのコードを追加します:

@IBOutlet var button: UIButton! 

var timer: Timer! 
var speedAmmo = 100 
@IBAction func buttonDown(sender: AnyObject) { 
    singleFire() 
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector:#selector(rapidFire), userInfo: nil, repeats: true) 
} 

@IBAction func buttonUp(sender: AnyObject) { 
    timer.invalidate() 
} 

func singleFire() { 
    if speedAmmo > 0 { 
     speedAmmo -= 1 
     print("bang!") 
    } else { 
     print("out of speed ammo, dude!") 
     timer.invalidate() 
    } 
} 

func rapidFire() { 
    if speedAmmo > 0 { 
     speedAmmo -= 1 
     print("bang!") 
    } else { 
     print("out of speed ammo, dude!") 
     timer.invalidate() 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    button.addTarget(self, action:#selector(buttonDown(sender:)), for: .touchDown) 
    button.addTarget(self, action:#selector(buttonUp(sender:)), for: [.touchUpInside, .touchUpOutside]) 
} 

私に知らせてください!

+0

はい。しかし、私はそれを行う方法がわからない@Bashir Sidani – Glenda

+0

私はあなたのために私の答えを更新:)ちょうど途中でタイマーの時間を印刷する! –

関連する問題