2016-05-17 15 views
0

Ich benutze iCarousel von @Nick Lookwood, um eine scrollbare Liste von "Flashcards" zu laden.So ersetzen Sie eine bestimmte Ansicht in iCarousel durch Antippen/Auswählen?

Jede Ansicht des iCarousel-Steuerelements ist eine Flashcard. Von Entwurf, ich benötige, dass, wenn ein Benutzer die Flashcard (Ansicht) antippt, die Flashkarte umklappt, um das dahinter zu enthüllen. Vor der Verwendung von iCarousel machte ich zwei separate Steuerelemente, eins für vorne und eins für hinten, und dann mit UIView.Transition (mit einer netten Flip From Top-Animation) von vorne nach hinten zu gehen, wenn ein Tap erkannt wurde, oder umgekehrt runden.

Das Hinzufügen eines UITapGestureRecognizer zu meiner Ansicht führt zu seltsamen Artefakten und funktioniert nicht wie erwartet (überlappende Steuerelemente, das nächste anstelle des aktuellen Spiegelns, keine Animation usw.) und ich brauche einen anderen Ansatz. Ich könnte das Selected Event im iCarousel Delegate anstelle eines Tap Gesture Recognizer verwenden, aber was genau mache ich dort?

Im Wesentlichen möchte ich die spezifische Ansicht ersetzen , die wurde mit einem anderen angezapft, aber ich fühle, dass dies mit der gesamten wiederverwendbaren Ansichten Idee widerspricht. Kann ich nichts machen? (Sobald die Ansicht außerhalb des Bildschirms ist, geht es mir gut, dass sie wieder "vorwärtsgeklappt" wird.)

Danke!

p

P.S. Ich benutze C# und Xamarin.iOS, aber ich kann Obj-C und Swift ziemlich gut verstehen, daher wird jede Hilfe geschätzt.

+0

für was es wert ist, ist iCarousel nicht wirklich egal, ob Sie die mitgelieferte Ansicht wiederverwenden oder nicht. Können Sie nicht einfach die Animation in Ihrer Ansicht auslösen, wenn die Ansicht ausgewählt ist? – Paulw11

Antwort

0

Es gibt viele Beispiele für iCarausal. Ich nehme an, Sie diese verwenden:

iCarausal

und speziell Ordnernamen "Grund iOS Beispiel"

Wie über die folgenden Änderungen in Delegatmethoden:

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view 
{ 
    UILabel *label = nil; 

    //create new view if no view is available for recycling 
    if (view == nil) 
    { 
     //don't do anything specific to the index within 
     //this `if (view == nil) {...}` statement because the view will be 
     //recycled and used with other index values later 
     view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 200.0f)]; 
     ((UIImageView *)view).image = [UIImage imageNamed:@"page.png"]; 
     view.contentMode = UIViewContentModeCenter; 

     //back view i have just added this apart from it there is no change made by me in this method 
     UIView *backView = [[UIView alloc] initWithFrame:view.bounds]; 
     backView.tag = 2; 
     [backView setBackgroundColor:[UIColor redColor]]; 
     [view addSubview:backView]; 
     [backView setHidden:YES]; 
     //back view 

     label = [[UILabel alloc] initWithFrame:view.bounds]; 
     label.backgroundColor = [UIColor clearColor]; 
     label.textAlignment = NSTextAlignmentCenter; 
     label.font = [label.font fontWithSize:50]; 
     label.tag = 1; 
     [view addSubview:label]; 



    } 
    else 
    { 
     //get a reference to the label in the recycled view 
     label = (UILabel *)[view viewWithTag:1]; 
    } 

    //set item label 
    //remember to always set any properties of your carousel item 
    //views outside of the `if (view == nil) {...}` check otherwise 
    //you'll get weird issues with carousel item content appearing 
    //in the wrong place in the carousel 
    label.text = [_items[index] stringValue]; 

    return view; 
} 

und Umsetzung didSelect Delegieren Sie wie folgt:

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

    UIView *frontview = [carousel itemViewAtIndex:index]; 
    UIView *backView = [frontview viewWithTag:2]; 

    BOOL isInFront = NO; 

    if (backView.hidden == NO) { 
     isInFront = YES; 
    } 
    [UIView transitionWithView: isInFront ? backView : frontview 
         duration:1.0 
         options:UIViewAnimationOptionTransitionFlipFromLeft 
        animations:^{ 
         [backView setHidden:isInFront]; 
        } 
        completion:nil]; 

} 

Sie sollten Ihren Code strukturierter schreiben, es war ein Beispiel, um Ihnen zu zeigen, dass Sie mit iCarausal erreichen können, was Sie wollen.