2014-12-13 117 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