0

現在、正常に機能するイメージ名に基づいてキューを設定しています。イメージ 0 から 13 をループして、それらをキューに追加します。

loadImagesOperationQueue = [[NSOperationQueue alloc] init];

NSString *imageName;
for (int i=0; i < 13; i++) {
    imageName = [[NSString alloc] initWithFormat:@"cover_%d.jpg", i];
    [(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageName] forIndex:i];
    NSLog(@"%d is the index",i);

}

これは問題なく動作します。キューは cover_0.jpg から cover_13.jpg まで設定されます。ただし、少しランダム性を追加したいと思います。だけを使用するarc4random()と、間違いなく同じ画像がキューに複数回追加されます。論理的には、どうすれarc4random()ば排他的になることができますか。選択した数字を文字列に追加してから、現在の出力と照合し、必要に応じて を繰り返すのarc4は冗長で非効率的です。

4

2 に答える 2

1

このようなことをしてください。

NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithCapacity:14];

for (int i = 0; i < 13; i++) {
    [tmpArray addObject:[NSString stringWithFormat:@"cover_%d.jpg", i]];
}

for (int i = 0; i < 13; i++) {
    int index = arc4random() % [tmpArray count];
    NSString *imageName = [tmpArray objectAtIndex:index];
    [tmpArray removeObjectAtIndex:index];
    [(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageName] forIndex:i];
}

[tmpArray release];

そして、あなたのコードは完璧に動作するべきではありません。あなたは漏れてimageNameいます。

于 2011-07-25T16:16:45.213 に答える
0

最初に配列に画像名を入力してから、値をランダムに選択します。

NSMutableArray * imageNames = [NSMutableArray array];
for (int i = 0; i < 13; i++) {
    NSString * iName = [NSString stringWithFormat:@"cover_%d.jpg", i];
    [imageNames addObject:iName];
}
while ([imageNames count] > 0) {
    int index = arc4random() % [imageNames count];
    NSString * iName = [imageNames objectAtIndex:index];
    [imageNames removeObjectAtIndex:index];
    // load image named iName here.
}
于 2011-07-25T16:15:19.447 に答える