更改NSArray iOS SDK中对象的Alpha值

时间:2012-03-31 20:59:00

标签: iphone ios cocoa-touch sdk nsarray

好的,所以我觉得这很简单,但它让我感到沮丧..我确定我只是错过了一些简单的东西,但是你能帮助我吗?我试图在nsarray中更改对象的alpha值(uiimageviews)。到目前为止,我得到了:

for (int i=1; i < [alphaSet count]; i++) {
   [[alphaSet objectAtIndex:i] setAlpha:masterAlpha];
}

它只会引发糟糕的访问......任何想法?

4 个答案:

答案 0 :(得分:1)

使用NSLog确保您的图片视图在那里。

for (int i=1; i < [alphaSet count]; i++) {
   NSLog(@"At count %i there is this object: %@", i, [alphaSet objectAtIndex:i]);
   UIImageView *iv = [alphaSet objectAtIndex:i];
   iv.alpha = masterAlpha;
}

答案 1 :(得分:1)

首先,我不确定你为什么要跳过第一个索引。假设这是一个错误,请检查您的代码并验证它是否与以下内容匹配:

<强> NSArrayDeclaration

NSArray * alphaSet;
//Your code for objects

masterAlpha声明

float masterAlpha = 0.5; //Whatever value you have

Alpha更改

for (int i = 0; i < [alphaSet count]; i++) {
    UIImageView * imageView = [alphaSet objectAtIndex:i];
    imageView.alpha = masterAlpha;
}

答案 2 :(得分:1)

我打赌这个数组是空的。从0 .. [数组计数]的典型for循环将无法无害地运行,但在空数组上从index = 1计数是一个“错误访问”崩溃。

因此,需要查看的代码是初始化alphaSet的代码。同时,一个更好的枚举方法是这样的:

for (UIImageView *imageView in alphaSet) {
  imageView.alpha = masterAlpha;
}

这对眼睛来说更快,更容易,并且它永远不会在阵列边界上崩溃。但是在找到alphaSet为空的原因之前,你不会在UI中产生任何影响。

答案 3 :(得分:1)

使用快速枚举更安全,也更快

相反,如果

for (int i = 0; i < [alphaSet count]; i++) {
    // do work
}

使用

for (UIImageView *imageView in alphaSet) {
    // do work
}

这样可以消除一个错误和错误初始化的可能性,就像你的例子一样。


对于这个例子,因为你只做了一件事,你根本不需要设置for循环而是可以使用

[alphaSet setValue:[NSNumber numberWithFloat:masterAlpha] forKey:@"alpha"];