2012-05-26 8 views
10

EDIT gepflückt:iCarousel Stopp an Benutzerindex

Ich mache eine App wie ein Slot Machine, hinzugefügt i iCarousel für das Slot-Objekt. Also habe ich eine Taste, die die iCarousel dreht. In meiner iCarousel Ansicht gibt es zwei Slots (Slot1 und Slot2). Unten ist mein iCarouselView: (Die Box ist, wo die beiden carousel ist)

enter image description here

Dies ist, wie ich meine Spin iCarousel:

-(IBAction) spin { 

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

} 

Hier ist, was ich tun will: ich will Zwingen Sie es mit Nachdruck auf den Index, den der Benutzer wählt.

Ich habe es so gemacht, unter dem Bild ist ein newViewcontroller, die die UIImageView mit einem Knopf darin enthält, so dass, wenn der Benutzer tippt es, meine CustomPicker erscheint. Mein CustomPicker enthält das Bild, das der Benutzer auf der Kamerarolle ausgewählt hat. So hat jede Taste einen bestimmten Wert an meine iCarouselView gesendet. Karussell1 für Slot1 und Karussell2 für Slot2.

Also mein Problem ist das Karussell drehen und dann für eine bestimmte Zeit machen Sie Stop auf das gewünschte Bild/Index der Benutzer wählt.

Sorry für mein schlechtes Englisch. enter image description here

+0

vielleicht möchten Sie alle Tasten in einem Array speichern und immer dann, wenn eine Schaltfläche geklickt wird, können Sie bestimmen, welche es war, das heißt, durch den Tag-Überprüfung, und dann Methodenaufruf tun. – Simon

+0

Konnten Sie mit nur 1 Knopf durchkommen? Nachdem Ihre Anzahl von 7 erreicht ist, aktivieren Sie die Schaltfläche (sie leuchtet oder etwas). Wenn der Benutzer dann auf die Schaltfläche klickt, sehen Sie sich den aktuellen Index Ihres Arrays oder etwas in der Art an. Ich bin vielleicht weit weg, weil ich mir nicht vorstellen kann, was Sie beschrieben haben. – Byron

+0

Welcher Teil war Ihnen unklar? – Bazinga

Antwort

4

Es ist einfach. Ich habe schon einmal etwas Ähnliches gemacht.

Im folgenden Verfahren unter:

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

Fügen Sie auch

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

}

Auch

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

} 

Sie haben fügen Sie etwas ähnliches zu tun. Hoffe es war hilfreich :) !!

+0

sie sind in zwei verschiedenen View-Controller, nicht 1. – Bazinga

+0

Können Sie Werte zwischen zwei View-Controller durch Eigenschaften passieren? Recht? – clearwater82

0

Ohne Erweiterung der UIButton können Sie der Schaltfläche einen eindeutigen TAG hinzufügen, der das Tag von der Quelle des UIEvent abruft.

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 ... 
} 

für zusätzliche Informationen über Parameter übergeben zu sehen: Passing parameters on button action:@selector

+0

Hallo ich habe meine Frage bearbeitet. Schauen Sie bitte. – Bazinga

0

Warum würden Sie nicht Ihre Tableview Idee zu tun, die unter Routineruf nehmen:

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

und setzen, dass in eine andere Nicht-Aktionsroutine, und die TableView-Methode didSelectItemAtIndex ruft Ihre neue Routine auf und lässt sie von Ihrer Aktionsroutine aufrufen.

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

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

Implementieren Dann

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

Hallo ich habe meine Frage bearbeitet. Bitte schauen – Bazinga

0

Ok, lassen Sie mich versuchen, die Frage neu zu formulieren: Sie haben eine Reihe von Bildern "imageArray" mit einem besonderen one "carousel1Image" (von newViewController ausgewählt). Sie möchten, dass das Karussell N Sekunden lang herumläuft und dann auf dem Speziellen landet?

Wenn das richtig ist, so etwas wie dies funktionieren sollte ...

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

==== ==== Alte Antwort

ich die Verwirrung der anderen über teilen, was das Ziel ist.Zum Beispiel ist es nicht klar, was ein "Preis" ist und was es mit Ihrem Spielautomaten zu tun hat? "Ich möchte, dass der Benutzer seinen letzten Preis wählt, das bedeutet, dass die letzte Ansicht oder das letzte Bild, wo mein Icarousel stoppen kann" Sorry, aber das stimmt nicht mit meinem Verständnis des Wortes "Preis" überein.

Aber lesen Sie Ihr Szenario am Ende: "Was ich will ist, wenn der Benutzer eine UITableViewCell oder ein Thumbnail mit einem bestimmten Bild aus dem Array klicken, wird es etwas/Wert zu meinem UIButton Spin, so dass das Bild klicken von Das UITableViewCell wird der letzte Preis sein. " Ich interpretiere, dass es entweder einen einzigen Wert gibt, den Ihre Drehschaltfläche für den Zugriff auf OR benötigt, dass für jedes Bild ein Wert vorhanden ist, auf den Ihre Drehschaltfläche zugreifen muss. Entweder scheint einer einfach, deshalb bin ich mir nicht sicher, warum die Frage.

Angenommen, es ist der erste (ein einziger Preis), warum kann dann nicht einfach Ihr Einstellungs-Controller eine Eigenschaft mit diesem Wert setzen (wie Sie Ihr Bild NSMutableArray übergeben)?

Wenn es der zweite (ein Wert für jedes Bild) ist, dann ist entweder erstellen zwei parallele Anordnungen, eine mit dem Preis und einen mit dem Bild oder haben eine Reihe mit Wörterbuch in ihr, die jeweils mit einem Kurs und ein Bild.