我想循环浏览一系列图像,并通过单击一个按钮逐个显示每个图像。
这是我的代码。
这是在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 :(得分: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++
}
答案 1 :(得分:2)
如果你想一次显示一个图像,那么为什么要循环?你可以这样做:
static int index;
- (IBAction)btn:(id)sender {
[img setImage:[arrayImg objectAtIndex:index]];
index = index == arrayImg.count - 1 ? 0 : index + 1;
}
答案 2 :(得分:1)
在viewDidLoad
中,再添加一行:
[buttonName setTag:0];
此处更改btn事件:
- (IBAction)btn:(UIButton *)sender {
[img setImage: [arrayImg objectAtIndex: [sender tag]]];
[sender setTag: [sender tag]+1];
if ([sender tag] > [arrayImg count]) {
[sender setTag: 0];
}
}
这也可以帮助你进行内存管理,因为这里没有其他额外的标志变量来保存你的整数值,而你的UIButton
对象只能保存。
希望这有助于您达到您的要求。
答案 3 :(得分:0)
据我所知,您只需点击一下即可遍历所有图像。
更好的方法可能是在单击后显示图像,而不是循环只是将表示索引值的变量增加1.这样每次单击后都会显示下一个图像。
另一种方法是使用计时器。
[NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(displayNextImage:)
userInfo:nil
repeats:YES];