我有两个动画阵列,一个是“之前”动画,一个是“之后”动画,需要在我的动画块中一起使用。我想随机化它们执行的顺序。我创建了一个0-3的数字数组,如下所示:
NSNumber *w = [NSNumber numberWithUnsignedInt: 0];
NSNumber *x = [NSNumber numberWithUnsignedInt: 1];
NSNumber *y = [NSNumber numberWithUnsignedInt: 2];
NSNumber *z = [NSNumber numberWithUnsignedInt: 3];
NSArray *numbers = [[NSArray alloc] initWithObjects: w, x, y, z, nil];
我正在使用this category to randomize the array,然后是:
[numbers shuffledArray];
然后我有另一组整数用于获取理论上的数字,并在我的动画块中使用这些:
int ww = [[numbers objectAtIndex:0] integerValue];
int xx = [[numbers objectAtIndex:1] integerValue];
int yy = [[numbers objectAtIndex:2] integerValue];
int zz = [[numbers objectAtIndex:3] integerValue];
[UIView animateWithDuration:.85 delay:3 options:opts animations:[animations objectAtIndex:ww] completion:[completions objectAtIndex:ww]];
[UIView animateWithDuration:.85 delay:8 options:opts animations:[animations objectAtIndex:xx] completion:[completions objectAtIndex:xx]];
等。我不仅仅使用“动画:[动画objectAtIndex:[数字objectAtIndex:0]]的原因是因为编译器向”NSUInteger“类型的参数抛出”不兼容的指向整数转换发送类型'id'的指针(又名'unsigned int')“当我这样做的时候,我尝试通过输入原始的int作为无符号的int来解决但在那里没有运气。
代码没有给我任何错误,一切运行得很好,除了没有任何随机化;但它按照我把所有东西放在首位的顺序。关于我哪里出错的任何想法?我尝试过其他一系列随机函数,似乎没什么用。
答案 0 :(得分:2)
根据您发布的代码,您似乎没有将返回的NSArray
存储在任何地方。也就是说,shuffledArray
不会将数组移动到位,它会返回一个新的混洗数组。确保存储它:
numbers = [numbers shuffledArray];
编辑:如果将返回的数组存储在numbers
中,请确保将其释放或将其设置为自动重新发布,除非您使用的是ARC。
答案 1 :(得分:2)
shuffledArray
不会改组数组:返回一个混洗数组。您没有捕获返回的结果。所以:
NSArray* result = [numbers shuffledArray];
现在结果将被洗牌。