2011-09-09 13 views
1

私はiPhone開発者にとって新しく、Apress.Beginning.Iphone4.Devを読む過程で、これがiPhoneアプリケーションを開発する上で最善の方法であるかどうかはわかりません。 私は現在、第4章でサンプルコードの実装を完了しましたが、少しmodを追加したいと思います。押された場合はUIViewの背景色を連続的に変更します

  • ボタンと呼ばれるディスコ
  • 、タッチアップの内側には、forループで self.view.backgroundColor値ランダムに100回 を変更することが開始されます。

    私の問題は、IBAction後の変更のみが完成し、ボタン ディスコ、に接続された背景であるので、私は唯一の代わりに、少なくとも2色の変化の1色の変化を見ることができました。

私の疑惑は、IBActionが完了するまでビューがリフレッシュ/リロードされないということです。この疑いは正しいですか?

私が実装したい機能を実現することが可能です。 - ボタンに触れる - 背景色がランダムに100回変化します。

ありがとうございました。先生、ありがとうございました。 timex88

はあなたのすべてをありがとう========================は、私はあなたのポインタには、この作業のおかげです。代わりに100回、 私はchangeBgColorメソッドを無期限に実行させます。

何私は気づいた、changeBgColorがまだ実行されている間、私は再びディスコ ボタンをタッチした場合、changeBgColor方法の割合が高くなった実行されている、誰かが理由を説明してくださいできますか?再び TIMEX 88

答えて

0

おかげであなたはあなたの方法が再び&再び

1
- (IBAction)changeColor:(id)sender 
{ 
    if (_timer == nil) 
    { 
    _changeColorCount = 0; 
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.2 
               target:self 
              selector:@selector(colorTimerFired) 
              userInfo:nil 
              repeats:YES]; 
    } 
} 

- (void)colorTimerFired 
{ 
    if (_changeColorCount > 100) 
    { 
     [_timer invalidate]; 
     _timer = nil; 
    } 
    else 
    { 
     [view setBackgroundColor:newRandomColor]; 
     _changeColorCount++; 
    } 
} 
+0

申し訳ありませんとviewDidLoadに初期化し、私は上記のコードでは、確認したい、どのように、どこ_timerが宣言されていますか? 、 再度、感謝します。 – timex88

+0

_timerはインスタンス変数なので、@interfaceセクションで宣言する必要があります。 – Davyd

+0

@interfaceセクションで宣言する必要があります:NSTimer * _timer ;.このタイマーでは、0.2秒ごとにcolorTimerFiredメソッドが呼び出されるため、この例ではビューの色は1秒に5回変化します。 100回後、[_timer invalidate]を呼び出してタイマーを停止させます。これにより、ランループからタイマーが削除されます。また、ポインタを無効にするので、次回にボタンを押すと別のタイマーを実行できます。 – Davyd

0
呼ばれるYES.ThenようNSTimerのためNSTimer.set繰り返しを用いる方法&呼び出しでこの方法を色を変更することができますコード

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 
                target:self 
               selector:@selector(changeColor) 
               userInfo:nil 
               repeats:YES]; 

以下ディスコボタンクリック書き込みの

は現在、以下のようにの新しい方法を作ります.hファイルにint iを宣言し、私は初心者くさい午前以来0

- (void) changeColor 
{ 
    // code for color change; 
    i++; 
    if (i==100) 
    { 
    [timer invalidate]; 
    } 
} 
+0

ありがとうが、NSTimerの宣言がポインタである場合、 – timex88

+0

に感謝しますが、NSTimerの宣言をポインタにする必要があります。NSTimer * timer = [[NSTimer alloc] ......];あなたのコードを逐語的に使用するとコンパイルエラーが発生する "無効な初期化子" – timex88

+0

はい、私はそれを忘れていましたが、私はそれを編集しています......そして答えを受け入れてください... – DShah

関連する問題