2011-12-11 10 views
0

アプリで働いていて、ここで利用可能な質問を勉強していましたが、私の問題を解決するのに似たようなものを見つけることはできません。xcodeのUIImageの複数の画像の間で変更する

私は4つの画像で配列を設定していますが、画像が連続してタッチされるたびに、別の画像に変更しようとしています。

例えば:image1の "タッチ" =>画像2 "タッチ" =>画像3 "タッチ" のimage4 "タッチ" =>画像1 .....

"感動" しない限り、画像は変更されません。私は成功し、次のコードを持つ2枚の画像間で変更することができるよ、その後

imageView.image = [imageArray objectAtIndex:0]; 

:私は、次の最初の画像を表示

-(void) viewDidLoad { 
     imageArray = [[NSArray alloc] initWithObjects: 
         [UIImage imageNamed:@"image1.png"], 
         [UIImage imageNamed:@"image2.png"], 
         [UIImage imageNamed:@"image3.png"], 
         [UIImage imageNamed:@"image4.png"], 
         nil]; 

私の配列が設定通りであります:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     UITouch *touch = [[event allTouches] anyObject]; 
     NSLog(@"'Touches Began"); 

     if ([touch view] == imageView) { 
      imageView.image = [imageArray objectAtIndex:1]; 
      NSLog(@"Image touched and changed"); 
     } 

私はimageViewの表示を2つ以上変更したいので、運を持つforループ内のステートメントがあれば:実行したとき

int touchCount = 0; 
    for (touchCount = 1; touchCount < 4; touchCount++) { 
     if ((touchCount < 4) && ([touch view] == imageView)) { 
      imageView.image = [imageArray objectAtIndex:touchCount]; 
      NSLog(@"Touch Count = %d", touchCount); 
     } 
    } 

、デバッガは「タッチカウント= 0」を示し、その後、ちょうどクラッシュやバックホーム画面に終了します。誰でもこの問題について助けてくれますか?私の考えは間違っていますか?

+0

ときにそれをクラッシュ? – CristiC

+0

あなたのforループは、クラッシュしていなければ、各画像を単純に連続して表示します。少数のイメージを回転させることは、ループ構造の呼び出しではありません。これは単に次の画像がどのように表示されるかを維持するだけです。あなたはそれを選ぶ乱数ジェネレータ、または他の何らかのアルゴリズムを持つことができます。あなたがコードで必要とするのは、次に表示されるイメージを決定し、そのイメージを渡すことです。 JRTurtonは、回転アルゴリズムに良い答えを与えます。 –

答えて

1

どのイメージが表示されているかを格納するインスタンス変数として整数を持ちます。 viewDidLoadでこれを0に設定します。

タッチが画像ビューに登録されている場合は、整数を増分します。値は、あなたのイメージアレイの数に等しい場合は、整数値で示されるイメージの配列の要素に画像を設定0

に戻ってそれを設定します。ログが何を言っている

// touch registered on image 
currentImage++; 
if (currentImage == [imageArray count]) 
    currentImage = 0; 

imageView.image = [imageArray objectAtIndex:currentImage]; 
+0

皆様のおかげです。今は素晴らしい作品です。私は、継続を容易にするために何らかのループが必要な印象を受けました.xcode自体がすでにトリガーまでループ状に実行されていることを忘れています。また、最初に「NSInteger * touchCount」を使用してtouchCountを初期化し、クラッシュすることを指摘します。私は通常の整数の代わりに "ポインタ"として扱ってきました。 "*"を取り除くことは、それが通常の整数であるようにすべてを解決しました。私はどんなノブですか?まだ私の前にはたくさんの仕事があります。 – wahfue

+0

私は上記のコメントに "NSInteger touchCount"を入れることを意味しました。 – wahfue

関連する問題