循环从头到尾的u_smages数组

时间:2012-01-15 04:43:05

标签: objective-c ios cocoa-touch loops nsmutablearray

我有一个NSMUtable图像数组,其中一个不同的图像显示前一个和下一个按钮,但是当我到达数组的末尾时,模拟器崩溃了。我想将数组的末尾循环到开头,这样当我再次点击下一个按钮到达图像数组的末尾时,它会循环回到第一个图像,当我在第一个图像上时,如果我点击它前一个按钮循环到最后一个没有崩溃的图像

3 个答案:

答案 0 :(得分:2)

你想要的是一个圆形数组,使用标准的NSMutableArray很容易实现。例如,假设您将图像存储在名为imageArray的数组中,并使用简单变量来跟踪当前图像的索引,例如:

int currentImageIndex = 0;

...然后您可以实施nextImagepreviousImage,例如:

- (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];
}

然后只要您想要逐步执行数组,就可以使用nextImagepreviousImage,并解决问题。

答案 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?

}