2016-09-22 4 views
0

私はカウントダウンアプリを持っており、カウントダウンのさまざまなフォーマットを持っています。これには、特定の日付までの日数分の秒数が含まれます。私は一度に1つの変数だけを表示させたい。スウィフト - タップ時に異なるテキストを表示する方法

だから、それは行くだろう:日TAP分TAP時間のTAP秒

秒が録音されたら、次にそれが戻ってスタートになります。だから、TAPの日を過ぎて繰り返しています。

私はジェスチャー認識機能を使用しようとしましたが、私は大惨事を抱えています。お手伝いできますか?

答えて

1

私はあなたに簡単な解決策を提供します。

まず、現時点であなたが見せている事を表している列挙型を作成します。

enum CountDownMode { 
    case Days, Minutes, Hours, Seconds 
} 

そして、コントローラでこのような変数を宣言:

var currentMode = CountDownMode.Days 

そして実際に、あなたはそのような単純な接触を認識するためにジェスチャ認識装置を使用する必要はありません。ただ、touchesBeganを上書き:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

} 

touchesBeganでは、currentModeの値を使用して、簡単に次の何であるかのモードを把握し、それに応じてテキストを変更することができます。

switch currentMode { 
case .Days: 
    // change text here 
    currentMode = .Minutes 
case .Minutes: 
    // change text here 
    currentMode = .Hours 
case .Hours: 
    // change text here 
    currentMode = .Seconds 
case .Seconds: 
    // change text here 
    currentMode = .Days 
} 
1

可能な限りこの解決策を簡略化します。

ボタンを押してタップするだけで、コード内で扱うことができます(ジェスチャ認識機能は明白に必要ありません)。状態に応じてテキストを変更します。デフォルトでは分のように、タップでは状態を数時間に変えます。

状態を変更するには?私はちょうど列挙型などを使用しますstate += 1

+0

それはラベルにする必要があります。 – Alex

+0

大したことではなく、ラベルの上にボタンを置き、 'label.center = button.center、label.width = button.width、label height = button.height'のような自動レイアウトに整列させます – Traveler

0

あなたのジェスチャーレコグナイザーを保持したい場合は、初期化時に0から始まるビューコントローラーによって保持されているフォーマットとインデックスの配列を持つことができます。各タップでインデックスをインクリメントし(モジュロで0に戻す)、カウントダウンのフォーマットを現在のインデックスの配列のフォーマットに設定します。

関連する問題