2014-11-14 83 views
-1

在目標C,我試圖移動熒光筆通過2並聯盒在一起的一個接一個,當我按下播放按鈕(使用阿爾法) (每個盒子具有從8張圖片陣列)在目標c中使用For循環?

問題是隻有一個的箱子圖片被突出顯示。而另一個只在第一個完成後纔會突出顯示。我不知道是否使用for循環的問題?或者是其他東西。

- (IBAction)didPressPlay:(id)sender { 

    self.playing = YES; 
    self.timer= [NSTimer scheduledTimerWithTimeInterval:60.0/self.BPM target:self selector:@selector(timerFire:) userInfo:nil repeats:YES]; 
} 

- (void) timerFire:(NSTimer *)timer { 

    for (UIButton *button in self.trackOneButtons) { 

     if (button.tag == self.sampleNumber) { 

      button.alpha=1.0; 
     } 
     else { 
      button.alpha = .5; 
     } 

     for (UIButton *button in self.trackTwoButtons) { 
      if (button.tag == self.sampleNumber) { 
       button.alpha=1.0; 
      } 
      else { 
       button.alpha =0.5; 
      } 
     } 
    } 

    self.sampleNumber ++; 
    if (self.sampleNumber >7) { 
     self.sampleNumber = 0; 
    } 
} 
+0

這裏,將需要對任何一個到多個信息有很多未知數幫幫我。也就是說,調試任何循環的最好方法之一就是在調試器中對其進行調試。在timerFire的開始處設置一個斷點,並在觀察button.tag的值的同時逐步瀏覽。 – timgcarlson

+0

在其他的方式,我怎麼可以使用兩個for循環到一起(第一for循環的第一個成員與第二for循環的第一個成員),那麼這兩個for循環的第二部件協同工作等工作。 – almehmady

+1

嗯,我認爲糟糕的縮進和格式化可能是問題的一個重要部分。 –

回答

0

假設兩個陣列將始終具有相同的數,你可以嘗試改變你的循環,以這樣的:

- (void) timerFire:(NSTimer *)timer { 

    CGFloat sampleNum = self.sampleNumber; 

    void (^alphaAdjust)(UIView*) = ^void(UIView*button){ 
     if (button.tag == sampleNum){ 
      button.alpha=1.0; 
     } else { 
      button.alpha =.5; 
     } 
    }; 

    for (int i = 0; i!=self.trackOneButtons.count; i++) { 

     UIView *btn1 = self.trackOneButtons[i]; 
     alphaAdjust(btn1); 
     UIView *btn2 = self.trackTwoButtons[i]; 
     alphaAdjust(btn2); 
    } 
... 
}