2012-05-26 4 views
10

EDIT:parada iCarousel en usuario recogió índice

estoy haciendo una aplicación como una máquina tragaperras, añadí iCarousel para el objeto de ranura. Así que tengo un botón que gira el iCarousel. En mi vista de iCarousel, hay dos espacios (Slot1 y Slot2). A continuación es mi iCarouselView: (La caja es donde los dos carousel es)

enter image description here

Esta es la forma en que hace girar mi iCarousel:

-(IBAction) spin { 

[carousel1 scrollByNumberOfItems:-35 duration:10.7550f]; 
[carousel2 scrollByNumberOfItems:-35 duration:10.7550f]; 

} 

Esto es lo que quiero hacer: Quiero obligarlo a detenerse en el índice que el usuario elija.

he hecho de esta manera, la imagen de abajo es una newViewcontroller que contiene el UIImageView con un botón en él, así que cuando el usuario toca, mi CustomPicker aparece. Mi CustomPicker contiene la imagen de lo que el usuario ha elegido en el rollo de la cámara. Entonces cada botón tiene un valor específico enviado a mi iCarouselView. carrusel1 para slot1 y carrusel2 para slot2.

Así que mi problema es girar el carrusel y luego por un tiempo específico hacerlo detener a la imagen/índice deseado por el usuario.

Lo siento por mi mal inglés. enter image description here

+0

quizás desee guardar todos los botones en una matriz y siempre que se haga clic en un botón, puede determinar cuál era, es decir, marcando la etiqueta y luego hacer su llamada al método. – Simon

+0

¿Podría salir adelante con solo 1 botón? Después de que su cuenta de centrifugado llega a 7, habilita el botón (se ilumina o algo así). Luego, cuando el usuario toca el botón, observa el índice actual en su matriz o algo de esa naturaleza. Puede que esté muy lejos porque no puedo imaginar lo que describiste. – Byron

+0

¿Qué parte no le quedaba clara? – Bazinga

Respuesta

4

Es fácil. He hecho algo similar antes.

En el siguiente método a continuación:

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index    reusingView:(UIView *)view{ 

    //Configure your view here 
    ..... 

    //Add a button on each view of the carousel 
    UIButton * someButton = [[UIButton alloc] initWithFrame:view.bounds]; 
    [someButton setAlpha:0.0]; 
    [someButton addTarget:self action:@selector(fingerLanded:) forControlEvents:UIControlEventTouchDown]; 
    [view addSubview:someButton]; 
    [view bringSubviewToFront:someButton]; 

    //Add a tag - correspond it to the index 
    someButton.tag = index; 

    //Make sure the view is user interaction enabled 
    [view setUserInteractionEnabled:YES]; 

    //Also make sure the button can actually receive touches and there is no view 
    //blocking touch events from being sent to the button. 

    return view; 
} 

también añaden

- (void) fingerLanded:(id) sender{ 

UIButton * theButtonFingerLandedOn = (UIButton *) sender; 

//This is the index the user tapped his finger on 
NSUInteger index = theButtonFingerLandedOn.tag; 

//Scroll to that particular index 
[self.carousel scrollToItemAtIndex:index animated:YES]; 

}

También añadir

- (void) viewDidLoad{ 

    //You may need this to enable user interaction on a view flying by  
    // Look in the - (void)transformItemViews method of the iCarousel library 
    self.carousel.centerItemWhenSelected = NO; 

} 

Hay que hacer algo similar. Espero que haya sido útil :)

+0

que están en dos controladores de vista diferentes, no 1. – Bazinga

+0

¿Puede pasar valores entre dos controladores de vista a través de las propiedades? ¿Derecha? – clearwater82

0

Sin extender UIButton puede agregar una etiqueta única al botón, obteniendo la etiqueta de la fuente del UIEvent.

IE:

-(void) buttonSetupMethod { 
    for(each item) { 
     UIButton * button = [[UIButton alloc] init]; 
     ... additional setup ... 
     button.tag = SOME_UNIQUE_TAG_FOR_BUTTON; 
     [button addTarget:self action:@selector(processaction:) forControlEvents:desiredEvents]; 
     ... retain button ... 
    [button release]; 
    } 
} 

-(void) processAction:(id) source 
{ 
    UIButton * button = (UIButton *) source; 
    int tag = button.tag; 
    ... conditional logic on specific tag ... 
} 

para información adicional sobre el paso de parámetros ver: Passing parameters on button action:@selector

+0

Hola, edité mi pregunta. Por favor mira. – Bazinga

0

Por qué wouldnt que hacer su idea tableview, tome el siguiente llamada de rutina:

[carousel scrollByNumberOfItems:-35 duration:10.7550f]; 

y puesto que en otra rutina de no acción, y haga que el método TableView didSelectItemAtIndex llame a su nueva rutina y llame a su rutina de acción.

-(void)newRoutineToCall:(int)itemsToMove{ 
    [carousel scrollByNumberOfItems:itemsToMove duration:10.7550f]; 
} 

-(IBAction) spin {   
    [self newRoutineToCall:-35]; 
} 

luego implementar

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self newRoutineToCall:[indexPath row]]; 
} 
+0

Hola, edité mi pregunta. Mire – Bazinga

0

Ok, voy a tratar reformular la pregunta: ¿Usted tiene una serie de imágenes "imageArray" con una especial "carousel1Image" (seleccionado por newViewController). ¿Quieres que el carrusel dé vueltas y vueltas por N segundos y luego aterrice en el especial?

Si eso es correcto, algo como esto debería funcionar ...

-(void) spinCarousel: (iCarousel *) carousel toIndex:(NSInteger) targetIndex { 
    NSInteger imagesPerSecond = 5; 
    double secondsToScroll = 10.7550f; 

    NSUInteger currIndex = [carousel currentItemIndex]; 
    NSUInteger numItems = [carousel numberOfItems] + [carousel numberOfPlaceholders]; 
    NSUInteger timesAround = floor(secondsToScroll*imagesPerSecond/numItems); 
    NSInteger numToScroll = timesAround*numItems + targetIndex-currIndex; 
    [carousel scrollByNumberOfItems:numToScroll duration: secondsToScroll]; 

} 

[self spinCarousel: carousel1 toIndex:[imageArray indexOfItem:carousel1Image]]; 
[self spinCarousel: carousel2 toIndex:[imageArray indexOfItem:carousel2Image]]; 

==== ==== viejo respuesta

Comparto la confusión de otros acerca de cuál es la meta.Por ejemplo, no está claro qué es un "precio" y qué tiene que ver con su máquina tragamonedas. "Quiero que el usuario elija su último precio, es decir, la última vista o imagen donde mi icarousel puede detenerse" Lo siento, pero eso no coincide con mi comprensión de la palabra "precio".

Pero al leer su escenario al final: "lo que quiero es que el usuario haga clic en una UITableViewCell o miniatura con una imagen específica de la matriz, pasará algo/valor a mi giro UIButton, para que la imagen haga clic en el UITableViewCell será el último precio ". Lo interpreto como que O BIEN hay un único valor al que su botón de giro necesita tener acceso O que hay un valor para CADA imagen a la que debe tener acceso su botón de giro. O uno parece simple, así que no estoy seguro de por qué la pregunta.

Asumiendo que es el primero (un precio único), ¿por qué no puede simplemente hacer que su controlador de configuración establezca una propiedad con ese valor (igual que cómo pasa su imagen NSMutableArray)?

Si es el segundo (un valor para cada imagen), cree dos matrices paralelas, una con el precio y otra con la imagen, O una matriz con diccionarios, cada una con un precio y una imagen.

Cuestiones relacionadas