iOS: iCarousel solo utiliza índices de vistas visibles

Estoy implementando iCarousel (usando el tipo coverflow) para mostrar un montón de imágenes de algunos videos que están disponibles en mi aplicación. (2 carruseles separados, mismo problema)

Utilizo las matrices de videos para numberOfItemsInCarousel (actualmente 60) y viewForItemAtIndex para usar los objects de mi matriz para crear la vista.

Sin embargo, solo se usan 5 de los videos. Entonces 60 artículos están apareciendo en el carrusel, pero se repiten los mismos 5 elementos. Cuando registré el índice dentro del 'viewForItemAtIndex', solo se llama 5 veces (0,1, … 5 son los resultados del logging). Después de algunas testings, parece que los únicos índices que se llaman son para lo que sea visible en el carrusel de forma pnetworkingeterminada.

¿Lo que da? * Las matrices se han probado para garantizar que se rellenen con todos los videos únicos. La matriz está bien, tiene algo que ver con el método iCarousel.

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel{ if(carousel==freeCarousel){ NSLog(@"Free: %i",freeVideos.count); return freeVideos.count; } if(carousel==feeCarousel){ NSLog(@"Fee: %i",feeVideos.count); return feeVideos.count; } return 0; } - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view{ NSLog(@"TESTING"); if (view == nil){ //Copy array for easier use of global Video / File object NSArray *copy = [[NSArray alloc] init]; if(carousel==freeCarousel){ copy = [NSArray arrayWithArray:freeVideos]; } else if(carousel==feeCarousel){ copy = [NSArray arrayWithArray:feeVideos]; } Videos *currentVideo = [copy objectAtIndex:index]; Files *file = [currentVideo valueForKey:@"files"]; NSLog(@"TITLE TEST: %@",currentVideo.title); //Video Button UIButton *buttonVideo = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 465, 310)]; [buttonVideo setTag:[currentVideo.videoID intValue]]; [buttonVideo addTarget:self action:@selector(showVideoDetails:) forControlEvents:UIControlEventTouchUpInside]; //Thumbnail UIImageView *videoThumbnail = [[UIImageView alloc] initWithFrame:buttonVideo.bounds]; //Border [videoThumbnail setBackgroundColor:[UIColor whiteColor]]; //Caption UIImage *captionImage = [UIImage imageNamed:@"video-box-caption"]; UILabel *caption = [[UILabel alloc] initWithFrame:CGRectMake(0, videoThumbnail.frame.size.height-captionImage.size.height, videoThumbnail.frame.size.width, captionImage.size.height)]; ]; ; ]; ]; ; [videoThumbnail addSubview:caption]; if(file.thumbnailPath!=(id)[NSNull null] || ![file.thumbnailPath isEqualToString:@"missing_image.png"]){ UIImage *thumbnailImage = [[DataManager shanetworkingManager] generateThumbnailImage:currentVideo]; [videoThumbnail setImage:thumbnailImage]; [buttonVideo addSubview:videoThumbnail]; }else{ UIImage *thumbnailImage = [UIImage imageNamed:@"video-details-thumbnail"]; [videoThumbnail setImage:thumbnailImage]; [buttonVideo addSubview:videoThumbnail]; } view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, buttonVideo.frame.size.width, buttonVideo.frame.size.height)]; [view addSubview:buttonVideo]; } return view; } 

Has implementado el método viewForItemAtIndex mal.

iCarousel recicla vistas para evitar asignar nuevos objects mientras se mueve (como una UITableView). La verificación if (view == nil) dice "si view es nil crear una nueva vista, de lo contrario usar una vista que ya haya configurado sin modificarla).

Mueva cualquier lógica específica de índice fuera de la verificación if (if view == nil). Si observa los ejemplos de iCarousel incluidos en la biblioteca, muestra cómo hacerlo correctamente.