-2

以下代码有问题:

int count = [imageArray count];
for (int i = 0; i <= count ; i++)
{
     UIImage *currentImage = [imageArray objectAtIndex: i];
     UIImage *nextImage = [imageArray objectAtIndex: i +1];
     self.imageview.image = [imageArray objectAtIndex: i];
[self.view addSubview:self.imageview];
CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.duration = 5.0;
crossFade.fromValue = (__bridge id)(currentImage.CGImage);
crossFade.toValue = (__bridge id)(nextImage.CGImage);
[self.imageview.layer addAnimation:crossFade forKey:@"animateContents"];
    self.imageview.image = nextImage;

};

对 iOS 编码来说非常新,所以任何帮助都将不胜感激,只需要知道如何停止错误。

4

2 回答 2

2

你有两个问题。您的数组中有 7 个对象。这意味着有效的索引是 0 到 6。

您的for循环被写入从 0 到 7 迭代。所以您应该将其编写为:

for (int i = 0; i < count; i++)

你有i <= count而不是i < count.

但还有另一个问题。在循环中,您在 index 处获得当前图像,在 index 处i获得下一个图像i + 1。所以这意味着当您在索引 6 处获取当前图像时,将从索引 7 检索下一个图像。这将使其再次崩溃。

您很可能希望更快地停止循环。它应该是:

for (int = 0; i < count - 1; i++)
于 2012-11-22T17:36:05.723 回答
0

问题是由于这段代码:

UIImage *nextImage = [imageArray objectAtIndex: i +1];

以及您使用的条件:i <= count

假设您的数组包含 6 个对象。然后循环将从 0 - 6 运行。数组索引从 0 开始,因此第 6 个元素索引为 5。如果您尝试获取 objectAtIndex:6,则会发生崩溃。

同样,如果 i 为 5,您将在 i+1 处拍摄图像,那么它将尝试获取 i+1 th 表示第 6 个元素。大概是撞车了。

改变你的方法,如:

int count = [imageArray count];
for (int i = 0; i <count-1 ; i++)
{
     UIImage *currentImage = [imageArray objectAtIndex: i];
     UIImage *nextImage = [imageArray objectAtIndex: i +1];
     self.imageview.image = [imageArray objectAtIndex: i];
     [self.view addSubview:self.imageview];
     CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
     crossFade.duration = 5.0;
     crossFade.fromValue = (__bridge id)(currentImage.CGImage);
     crossFade.toValue = (__bridge id)(nextImage.CGImage);
     [self.imageview.layer addAnimation:crossFade forKey:@"animateContents"];
     self.imageview.image = nextImage;

};
于 2012-11-22T17:33:51.487 回答