遇到以下代码问题:
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编码非常新,所以任何帮助都会受到赞赏,只需要知道如何停止错误。
答案 0 :(得分:2)
你有两个问题。你的数组中有7个对象。这意味着有效索引为0到6。
你的for
循环被编写为从0到7迭代。所以你应该把它写成:
for (int i = 0; i < count; i++)
您有i <= count
而不是i < count
。
但还有另一个问题。在循环内部,您将获得索引i
处的当前图像以及索引i + 1
处的下一图像。所以这意味着当您在索引6处获取当前图像时,将从索引7中检索下一个图像。这将使其再次崩溃。
很可能你想更早地停止循环。它应该是:
for (int = 0; i < count - 1; i++)
答案 1 :(得分:0)
问题在于这段代码:
UIImage *nextImage = [imageArray objectAtIndex: i +1];
以及您使用的条件:i <= count
假设您的数组包含6个对象。然后循环将从0到6运行。数组索引从0开始,因此第6个元素索引是5.如果您尝试获取objectAtIndex:6将发生崩溃。
同样明智的是,如果i为5,你在i + 1拍摄图像,那么它将尝试取i + 1表示第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;
};