iCarousel Tipo lineal comienza desde el centro

Me gustaría que iCarousel comience a aparecer desde la izquierda, es decir, debería estar alineado a la izquierda. He descubierto que, en el caso de Linear Carrusel, comienza desde el centro de la pantalla.

¿Cómo puedo hacer que el carrusel lineal comience desde la izquierda?

En mi caso, me ayudó el uso del método [self.vwCoverFlow scrollToItemAtIndex:2 animated:YES]; en mi vista, DidLoad.

Si desea un desplazamiento lineal, puede utilizar la class swipeView, es del mismo desarrollador que iCarousel pero solo para desplazamiento lineal. Lo he usado y admite la alignment a la izquierda. Es fácil de agregar y usar, al igual que iCarousel

aquí está el enlace para el código https://github.com/nicklockwood/SwipeView

Establezca la propiedad wrap en YES y devuelva la cantidad de placeholderinCarousel como 2

Tuve el mismo problema y lo hice con el siguiente hack;)

Problema: necesito tener vista para mostrar solo 3 elementos que siempre están alineados a la izquierda.

Resolución: Lo que he hecho es hacer siempre al less 3 elementos. Si tengo 0, 1 o 2 elementos, siempre estoy creando 3, pero los que no necesitan ser mostrados, estoy creando como UIView vacío. Siempre tengo 2 marcadores de position, pero en algunos casos uno o ambos están vacíos.

Por ejemplo, si tenemos 2 elementos para mostrar, de hecho estoy creando tres, pero el tercero está vacío UIView. Estoy creando dos marcadores de position y un elemento.

  • El primer elemento es el primer marcador de position en el índice 0
  • Segundo artículo es artículo
  • El tercer elemento es el segundo marcador de position pero con la vista UIV vacía

Si tenemos 1 elementos para mostrar, nuevamente estoy creando tres, pero el segundo y el tercero están vacíos UIView. Igual que en el ejemplo anterior, estoy creando dos marcadores de position y un elemento.

  • El primer elemento es el primer marcador de position en el índice 0
  • El segundo elemento es el elemento pero con la vista UIV vacía
  • El tercer elemento es el segundo marcador de position pero con la vista UIV vacía

Debido a esta lógica, siempre estoy limpiando la vista cuando se reutiliza ([v removeFromSuperview]), para asegurarme de que está limpia y si hay que mostrar una nueva, la agregaré ([ver addSubview …]. La misma lógica para el artículo y el marcador de position.

Si necesita más de 3 elementos visualizados, puede usar la misma lógica, pero cambie el valor 3 por otra. Si me equivoco, actualíceme;)

Aquí hay una parte del código que funciona para mí;)

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

Esto me funciona

  - (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel{ [carousel scrollToItemAtIndex:photosArray.count/2 animated:YES]; return [photosArray count]; } 

En su caso, me gustaría sugerir el uso de 2 marcador de position.

Ej: tienes n fotos, entonces tendrás (n-2) elementos y 2 marcadores de position. – El índice de elementos es de 1 a (n-2). – El índice de marcadores de position es 0 y (n-1). Ahora tendremos un código como este:

 #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); }