我有一个NSMUtable图像数组,其中一个不同的图像显示前一个和下一个按钮,但是当我到达数组的末尾时,模拟器崩溃了。我想将数组的末尾循环到开头,这样当我再次点击下一个按钮到达图像数组的末尾时,它会循环回到第一个图像,当我在第一个图像上时,如果我点击它前一个按钮循环到最后一个没有崩溃的图像
答案 0 :(得分:2)
你想要的是一个圆形数组,使用标准的NSMutableArray
很容易实现。例如,假设您将图像存储在名为imageArray
的数组中,并使用简单变量来跟踪当前图像的索引,例如:
int currentImageIndex = 0;
...然后您可以实施nextImage
和previousImage
,例如:
- (UIImage*) nextImage {
currentImageIndex = (currentImageIndex + 1) % [imageArray count];
return [imageArray objectAtIndex:currentImageIndex];
}
- (UIImage*) previousImage {
currentImageIndex--;
if (currentImageIndex < 0) {
currentImageIndex = [imageArray count] - 1;
}
return [imageArray objectAtIndex:currentImageIndex];
}
然后只要您想要逐步执行数组,就可以使用nextImage
和previousImage
,并解决问题。
答案 1 :(得分:0)
足够简单。您需要做的就是创建一个检查以查看您是否在最后一个元素上,如果是,请将您的跟踪器(如count或i等)再次设置为0,
继承了psudo代码 //设置索引
if ( array [ index ] == len(array) - 1) //at end
{
index = 0
}
if(array [index] == -1)//at beginning
{
index = len(array) -1
}
// do something with array[index]
答案 2 :(得分:0)
我想提出这个解决方案:
所选UIImage的属性,一个用于保存当前索引的NSInteger属性。
-(IBAction) nextButtonTapped:(id)sender
{
self.currentIndex = self.currentIndex++ % [self.images count];
self.selectedImage= [self.images objectAtIndex:self.currentIndex];
[self reloadImageView];
}
-(IBAction) previousButtonTapped:(id)sender
{
self.currentIndex--;
if (self.currentIndex < 0)
self.currentIndex += [self.images count];
self.selectedImage= [self.images objectAtIndex:self.currentIndex];
[self reloadImageView];
}
-(void)reloadImageView
{
//do, what is necessary to display new image. Animation?
}