ho avuto lo stesso problema e farlo con un trucco;)
Problema: Ho bisogno di avere vista che mostra solo 3 elementi che sono sempre allineati a sinistra.
Risoluzione: Quello che ho fatto è di fare sempre almeno 3 articoli. Se ho 0, 1 o 2 elementi creo sempre 3, ma quelli che non hanno bisogno di essere mostrati che sto creando come UIView vuoto. Ho sempre 2 segnaposti, ma in alcuni casi uno o entrambi sono vuoti.
ad es. Se abbiamo 2 elementi da visualizzare, in realtà sto creando tre, ma il terzo è vuoto UIView. Sto creando due segnaposti e un oggetto.
- Il primo oggetto è prima segnaposto indice 0
- Secondo elemento è Articolo
- Terzo elemento è seconda segnaposto ma con UIView vuoto
Se abbiamo 1 articoli per visualizzare, di nuovo ne sto creando tre, ma il secondo e il terzo sono UIView vuoti. Come nell'esempio precedente, sto creando due segnaposto e un articolo.
- primo oggetto è prima segnaposto indice 0
- Secondo elemento è articolo ma con UIView vuoto
- Terzo elemento è seconda segnaposto ma con UIView vuoto
Poiché di questa logica sto sempre pulendo la vista quando riusciamo ([v removeFromSuperview]), per essere sicuro che sia pulito e se deve essere visualizzato uno nuovo, aggiungo ing it ([vedi addSubview ...). Stessa logica per Articolo e Segnaposto
Se avete bisogno di avere più di 3 articoli che è possibile utilizzare stessa logica, ma modificare il valore 3 a qualcos'altro visualizzata. Se mi sbaglio mi aggiornare;)
Ecco una parte del codice di miniera che funziona per me;)
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
return [[self getRecordings] count] > 3? [[self getRecordings] count] - 2: 1;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
if (view == nil)
{
view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
}
else
{
// If reusing remove content from holder view for fake items
for (UIView *v in view.subviews)
{
[v removeFromSuperview];
}
}
if ([[self getRecordings] count] >= 2)
{
[view addSubview:[(RecordingItemViewController*)[_recordingItemViewControllers objectAtIndex:index + 1] view]];
}
return view;
}
- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel
{
return 2;
}
- (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
if (view == nil)
{
view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
}
else
{
// If reusing remove content from holder view for fake items
for (UIView *v in view.subviews)
{
[v removeFromSuperview];
}
}
if (([[self getRecordings] count] > 0 && [[self getRecordings] count] < 3 && index == 0) || [[self getRecordings]count] >= 3)
{
[view addSubview:[(RecordingItemViewController*)(index == 0? [_recordingItemViewControllers objectAtIndex:0]: [_recordingItemViewControllers lastObject]) view]];
}
return view;
}
Grazie .. funzionare bene. – Sudhakar
risparmi il mio giorno uomo :) Grazie! – Irfan
Ma questo scorre il carosello al 2 ° indice che non mostra il primo oggetto dall'estrema sinistra? –