2014-12-13 102 views
0

我想遍歷一組圖像,並通過單擊一個按鈕來逐個顯示每個圖像。在圖像數組中循環訪問

這是我的代碼。

這是viewDidLoad方法:

arrayImg = [[NSArray alloc]initWithObjects: 
      [UIImage imageNamed:@"samsung_logo_small.jpg"], 
      [UIImage imageNamed:@"Small_logo_splash.png"], 
      [UIImage imageNamed:@"Red_logos_small.png"], 
      [UIImage imageNamed:@"li-logo-small-drshdw.gif"], 
      nil]; 

這裏是我的按鈕在我的影像

- (IBAction)btn:(id)sender { 
for (int i = 0 ; i < [arrayImg count]; i++) { 
    [img setImage:[arrayImg objectAtIndex:i]]; 
} 

}循環

的問題是,它只是顯示最後的圖像,而不是所有的圖像。

我在做什麼錯在這裏?

我發現了2個這樣的問題,但無法找到答案。

+0

問題是,你一次循環所有圖像,而不是每次點擊一次。 – 2014-12-13 14:04:52

+0

對於通過圖像循環並將所有圖像逐一設置爲相同的圖像視圖,您期望什麼? – Andy 2014-12-13 14:28:49

回答

3

添加下列YourClass.m文件:

@interface YourClass() { 
    int variableName; 
} 

@end

viewDidLoad初始化VARIABLENAME到0

- (IBAction)btn:(id)sender 
{ 
    if (variableName == arrayImg.count) 
    { 
     variableName = 0; 
    } 
    [img setImage:[arrayImg objectAtIndex:classVariable]]; 
    variableName++ 
} 
+0

嗨,感謝您的回答.....但請回答幾個問題。當我將IF語句包裝在括號中時,它不起作用,但之後它確實起作用,原因是什麼?爲什麼arrayImg.count被設置爲等於變量名? 謝謝 – 2014-12-13 17:16:24

+0

@MuhammadAmeenSheikh然後,您必須正確使用「if語句」的括號。 'arrayImg.count'沒有被設置爲變量名,它被*檢查了*'variableName'。研究'='和'=='之間的區別,你必須知道這一點。 – rebello95 2014-12-13 19:12:12

+0

@MuhammadAmeenSheikh我希望你已經得到了我的回答,正如rebello95所解釋的。謝謝。 – Anon 2014-12-13 19:53:25

0

從我所知道的,你只需點擊一下即可瀏覽所有的圖像。

更好的方法可能是在點擊後顯示圖像,而不是循環,只是將表示索引值的變量加1。這種方式在每次單擊之後顯示下一個圖像。

另一種方法是使用計時器。

[NSTimer scheduledTimerWithTimeInterval:2.0 
           target:self 
           selector:@selector(displayNextImage:) 
           userInfo:nil 
           repeats:YES]; 
2

如果你想一次顯示一個圖像,爲什麼循環?你可以這樣說:

static int index; 

- (IBAction)btn:(id)sender { 

    [img setImage:[arrayImg objectAtIndex:index]]; 
    index = index == arrayImg.count - 1 ? 0 : index + 1; 
} 
+1

你的是更好的答案(使用靜態)。儘管如此,你可以使用if-else來獲得更好的可讀性。 – viral 2014-12-13 14:39:40

1

在你viewDidLoad,增加一個行:在BTN事件

[buttonName setTag:0]; 

這裏的變化:

- (IBAction)btn:(UIButton *)sender { 

    [img setImage: [arrayImg objectAtIndex: [sender tag]]]; 

    [sender setTag: [sender tag]+1]; 

    if ([sender tag] > [arrayImg count]) { 
    [sender setTag: 0]; 
    } 
} 

這將幫助你在內存管理因爲這裏沒有其他額外的標誌變量需要保存你的整數值,而你的UIButton對象只能保持。

希望這會幫助您達到您的要求。

+0

建議。你可以使用' - (IBAction)btn:(UIButton *)sender {'而不是' - (IBAction)btn:(id)sender {',然後直接訪問sender.tag'。 – Anon 2014-12-13 14:12:56

+0

@Richa Sharma:這也是可能的。分別更新了ans。 – Mrunal 2014-12-13 14:31:49

+1

第一行是不必要的,因爲'UIView'默認爲'0'的'tag' – rebello95 2014-12-13 19:14:00