2013-01-22 9 views
9

Vorrei che iCarousel iniziasse a comparire da sinistra, quindi dovrebbe essere allineato a sinistra. Ho scoperto che nel caso di Linear Carousel inizia dal centro dello schermo.Il tipo lineare iCarousel inizia dal centro

Come si può far partire il carosello lineare da sinistra?

risposta

7

Nel mio caso, sono stato aiutato con l'uso del metodo [self.vwCoverFlow scrollToItemAtIndex:2 animated:YES]; nel mio viewDidLoad .

+0

Grazie .. funzionare bene. – Sudhakar

+0

risparmi il mio giorno uomo :) Grazie! – Irfan

+0

Ma questo scorre il carosello al 2 ° indice che non mostra il primo oggetto dall'estrema sinistra? –

4

Se si desidera uno scorrimento lineare, è possibile utilizzare la classe swipeView, è dello stesso sviluppatore di iCarousel ma solo per lo scorrimento lineare. L'ho usato e supporta l'allineamento a sinistra. La sua facile aggiungere e usati, uguale iCarousel

ecco il link per il codice https://github.com/nicklockwood/SwipeView

0

nel tuo caso, vorrei suggerire utilizzando 2 segnaposto.

Es: hai n foto, quindi avrai (n-2) articoli e 2 segnaposti. - L'indice degli articoli va da 1 a (n-2). - L'indice dei segnaposti è 0 e (n-1). Ora avremo un po 'di codice come questo:

#pragma mark iCarousel DataSource 

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel 
{ 
    //if we have n photos, then number of items is (n-2) 
    int count = _movieGalleries.count; 
    return count >= 3 ? count - 2 : count; 
} 

- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel 
{ 
    //2 placeholder 
    return _movieGalleries.count >= 3 ? 2 : 0; 
} 

#pragma mark iCarousel Delegate 
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view 
{ 
    //reuse your view 
    UIView *yourview = ... 

    //get your data 
    //index of item is 1 -> n-2, index of placeholder is 0 and n-1 
    Item *item = [_listItems objectAtIndex:index + 1]; 

    //config your view 
    ... 
    return yourView; 
} 

- (UIView*)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view 
{ 
    //index of placeholder is 0 and n-1 
    //Trick: we use viewForItemAtIndex for getting placeholder view 
    index = index == 0 ? - 1 : carousel.numberOfItems; 
    return [self carousel:carousel viewForItemAtIndex:index reusingView:view]; 
} 

- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index 
{ 

    //in carousel with placeholder, index of selected item is -1, 0, 1, ..., (n-2). which -1 and (n-2) is index of placeholders. So that we need to increase index by 1 
    NSLog("current index: %i", index + 1); 
} 
1

Impostare la proprietà avvolgere su YES e restituire il numero di placeholderinCarousel come 2

1

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; 
} 
1

questo funziona per me

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel{ 

     [carousel scrollToItemAtIndex:photosArray.count/2 animated:YES]; 

     return [photosArray count]; 
     } 
Problemi correlati