に 2 つ作成NSMutableArray
しviewDidLoad
、 に追加しNSMutableDictionary
ます。1つの配列でシャッフルしてみたら、大丈夫でした。しかし、問題は、2つの配列を個別にシャッフルするとうまくいかず、どういうわけかインデックスが混同されてしまうことです。
これが私の配列のコードです(最初の配列):
self.items1 = [NSMutableArray new];
for(int i = 0; i <= 100; i++)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"[Images%d.png", i]];
if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){
self.container = [[NSMutableDictionary alloc] init];
[container setObject:[UIImage imageWithContentsOfFile:savedImagePath] forKey:@"items1"];
[container setObject:[NSNumber numberWithInt:i] forKey:@"index1"];
[items1 addObject:container];
}
}
NSLog(@"Count : %d", [items1 count]);
[items1 enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
NSLog(@"%@ images at index %d", object, index);
}];
(2 番目の配列):
self.items2 = [NSMutableArray new];
for(int i = 0; i <= 100; i++)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"secondImages%d.png", i]];
NSLog(@"savedImagePath=%@",savedImagePath);
if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){
self.container = [[NSMutableDictionary alloc] init];
[container setObject:[UIImage imageWithContentsOfFile:savedImagePath] forKey:@"items2"];
[container setObject:[NSNumber numberWithInt:i] forKey:@"index2"];
[items2 addObject:container];
}
}
NSLog(@"Count : %d", [items2 count]);
[items2 enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
NSLog(@"%@ images at index %d", object, index);
}];
iCarousel
私の配列を使用している場所の私の見解:
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
if (carousel == carousel1)
{
NSDictionary *obj = [items1 objectAtIndex:index];
view = [[UIImageView alloc] initWithImage:[obj objectForKey:@"items1"]];
view.tag = index;
}
else
{
NSDictionary *obj = [items2 objectAtIndex:index];
view = [[UIImageView alloc] initWithImage:[obj objectForKey:@"items2"]];
view.tag = index;
}
return view;
}
次に、シャッフルコード(他の配列に複製しようとしましたが、機能しませんでした):
srandom(time(NULL));
NSUInteger count = [items1 count];
for (NSUInteger i = 0; i < count; ++i) {
int nElements = count - i;
int n = (random() % nElements) + i;
[items1 exchangeObjectAtIndex:i withObjectAtIndex:n];
}
上記のコードを使用して (または他の提案がある場合)、2 つの配列を使用してシャッフルするにはどうすればよいですか? ありがとう
私のもう1つの問題は、シャッフルメソッドのクラスをサブクラス化しようとするか、上記のコードを使用してインデックスを混在させようとするときです。例えば:
オブジェクト: リンゴ、ボール、ニンジン、犬
インデックス: 1 2 3 4
しかし、シャッフルしたときの私の見解では:
オブジェクト: ニンジン, リンゴ, 犬, バレ
索引: 2 4 1 3
カルーセルが停止すると、表示中の画像が削除されるという方法もあります。