2010-08-30 3 views
20

Ich versuche, einen Übergang zwischen zwei Untersichten (view1 und view2) zu erstellen. Wenn eine Taste gedrückt wird, möchte ich, dass View1 (vorne) umdreht und View2 (zurück) anzeigt. Ich habe sowohl transitionFromView als auch transitionWithView ausprobiert. Jeder funktioniert - aber jeder hat ein Problem.Übergangsverhalten mit TransitionFromView und TransitionWithView

transitionFromView - blättert den Superview (die ganze Fensteransicht kippt, nicht die Subviews). Wenn dieses Flip passiert - eine Subview befindet sich auf der Vorderseite des Superview vor dem Flip und die andere Subview befindet sich auf der Rückseite des Flip - wie es sein sollte. Aber ich möchte nicht, dass der Superview umdreht, nur die Unteransichten.

transitionWithView - blendet nur die Unteransichten - aber die 'to' Ansicht wird angezeigt, bevor der Übergang stattfindet.

Hat jemand einen Vorschlag?

-(IBAction) button1action:(id) sender { 

if ([sender tag] == 0) { 

    [UIView transitionFromView:view2 toView:view1 duration:2.0 
    options:UIViewAnimationOptionTransitionFlipFromLeft 
    completion:nil]; 
} 

else { 
    [view1 removeFromSuperview];  
    [self.view addSubview:view2]; 
    [UIView transitionWithView:view2 
    duration:2.0 
    options:UIViewAnimationOptionTransitionFlipFromRight + 
    UIViewAnimationOptionShowHideTransitionViews 
     animations:^{} 
    completion:nil]; 
} 
} 
+4

Bitte markieren Sie eine Frage unten als Antwort, oder geben Sie eine eigene Antwort ein, die Ihr Problem gelöst hat, um der Community zu helfen. – Sam

+0

Warum sollte er eine Frage als Antwort markieren? : D –

Antwort

26

Sie müssen die Teilansichten im Animationsblock entfernen und hinzufügen. Außerdem glaube ich, dass transitionWithView die Superansicht als Argument nehmen soll. Ich denke, was Sie tun müssen, um dies zu erreichen, ist eine Containeransicht, die die gleiche Größe wie die Ansichten hat, die Sie spiegeln möchten.

Dies wird aus der Dokumentation kopiert:

[UIView transitionWithView:containerView 
     duration:0.2 
     options:UIViewAnimationOptionTransitionFlipFromLeft 
     animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; } 
     completion:NULL]; 
+0

Dies scheint nicht zu funktionieren – jjxtra

+1

Die Containeransicht ist der Schlüssel. Dies ist getestet und funktioniert auf ios6 und ios7 – Jameo

12

ich in diese genau das gleiche Problem laufen, und ich mit der früheren Antwort zustimmen. Anscheinend benötigen Sie eine Containeransicht, um einen Übergang von einer Unteransicht zu einer anderen Unteransicht zu animieren.

Ich verwende den TransitionFromView-Ansatz. Um hinter der Animation einen Hintergrund zu haben, benötigen Sie zusätzlich eine Übersicht mit dem Hintergrund der Containeransicht.

Mein Code sieht so aus:

[UIView transitionFromView:view1 
         toView:view2 
         duration:0.5 
         options:UIViewAnimationOptionTransitionFlipFromRight | 
           UIViewAnimationOptionAllowUserInteraction | 
           UIViewAnimationOptionBeginFromCurrentState 
        completion:nil]; 
1

ich die gleiche Forderung hatte, und sah viele Ansätze - von der Verwendung Schichten (die sehr endet kompliziert, wenn man nur mit einem UIView wollen befassen) zu Vorschlägen, die Ich brauchte einen "Container", um dann zwischen Unteransichten zu wechseln. Aber wenn du nur etwas von vorne nach hinten schwenken willst, wie zum Beispiel eine Spielkarte oder eine Spielkachel, habe ich eine Zeile geändert:

(beachte: ich habe ein Array von UIViews (Kacheln [x] [y ]) in einem Gitter (für ein Spiel). Ich habe alle meine Imagefilename in Datenbanktabellen/Arrays, die dynamisch in die UIImages der UIImageViews geladen werden. Das Bild für die "Rückseite" einer Karte oder Kachel in einem UIImage namens " tileBackPicImageNM“

so mein Code, der einfach das vordere Bild ausgelagert für ein Bild von der Rückseite war:..

[tiles[indexX][indexY] setImage:[UIImage imageNamed:tileBackPicImageNM]]; 

der gut arbeitet

aber und jetzt, ein Umklappen Aktion zu zeigen, es ist:

[UIView transitionWithView:tiles[indexX][indexY] duration:0.3 options:UIViewAnimationOptionTransitionFlipFromLeft 
        animations:^{ 
         [[indexX][indexY] setImage:[UIImage imageNamed:tileBackPicImageNM]]; 
        } 
        completion:NULL];  

ich mit verschiedenen „Dauer“ Parametern experimentiert - anschließend machte es einen Schwimmer, die ich in der viewDidLoad Routine gesetzt. Schneller als 0,3 ist fast nicht sichtbar, und ein Wert von 1 oder 2 ist sehr langsam ...

mit sich bringt diese nicht zwei Teilansichten, die mein Fall ist, da ich eine Hierarchie der Ansichten, die eine Anordnung von Behältern haben, wollte nicht viel mehr nützlich, usw. enthalten ... und auf neue Ebenen etc i immer nachladen die Arrays sowieso ...

5

Nachdem in das gleiche Problem laufen ich stimme mit Eric und Sam: entweder transitionWithView oder transitionFromView werden beide tun, was Sie über so lange wie angegeben möchten, wie Sie einen Container Ansicht des entsprechenden erstellen Größe, die Sie umdrehen möchten. Andernfalls wird die gesamte Fensteransicht umgedreht.

Also, wenn view1 ist die Subview Sie beginnen mit, und Sie möchten Flip dann

UIView *containerView = [[UIView alloc] initWithFrame:appropriateSize]; 
[containerView addSubview:view1]; 

View2 hinzufügen und dann die einfachste Art und Weise wahrscheinlich zu animieren ist:

[UIView transitionFromView:view1 
        toView:view2 
        duration:2.0 
        options:UIViewAnimationOptionTransitionFlipFromLeft 
       completion:nil]; 
7

Hier ist meine Arbeitslösung stub, eine einfache Sache, die 2 Stunden dauerte, verdammt: wir haben 1 Taste, um Dinge zu drehen, eine UIView genannt Panel, das die 2 Ansichten, die ich mit einer Flip-Animation tauschen will.

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    UIButton *btnFlip = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    btnFlip.frame = CGRectMake(10, 10, 50, 30); 
    [btnFlip setTitle:@"flip" forState:UIControlStateNormal]; 
    [btnFlip addTarget:self action:@selector(flip) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:btnFlip]; 

    panel = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 300,300)]; 
    panel.backgroundColor = [UIColor darkGrayColor]; 
    [self.view addSubview:panel]; 

    panelBack = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 280, 200)]; 
    panelBack.tag = 1; 
    panelBack.backgroundColor = [UIColor brownColor]; 
    [panel addSubview:panelBack]; 

    panelFront = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 280, 200)]; 
    panelFront.tag = 2; 
    panelFront.backgroundColor = [UIColor whiteColor]; 
    [panel addSubview:panelFront]; 

    displayingFront = TRUE; 
} 

-(void)flip{ 

    [UIView transitionWithView:panel 
    duration:0.5 
    options:(displayingFront ? UIViewAnimationOptionTransitionFlipFromRight : UIViewAnimationOptionTransitionFlipFromLeft) 
    animations:^{ 
     if (displayingFront) { 
      //panelFront.hidden=TRUE; 
      //panelBack.hidden = FALSE; 
      [panelFront removeFromSuperview]; 
      [panel addSubview:panelBack]; 
     }else{ 
      //panelFront.hidden=FALSE; 
      //panelBack.hidden = TRUE; 
      [panelBack removeFromSuperview]; 
      [panel addSubview:panelFront]; 
     } 
    } 
    completion:^(BOOL finished){ 
     displayingFront = !displayingFront; 
    }]; 
} 
+0

cool ... funktioniert perfekt – RATTLESNAKE

0

Denken Sie daran, dass der Behälter Ansicht, die einen soliden Hintergrund color.It erfordert bedeutet nichts anderes, als klar Color.This mein Fehler war und verbrachte ziemlich lange Zeit, es herauszufinden.

0

Mit der Funktion transitionFromView sollten sowohl die Vorder- als auch die Rückansicht in einer anderen Ansicht (nicht in der Superansicht) angezeigt werden. Auf diese Weise wird nicht der ganze Bildschirm gedreht.

> superview 
>  another view 
>  backview 
>  frontview 

UIView.transitionFromView (vorne, toview: Backview, Dauer: 0,5, Optionen: .TransitionFlipFromLeft | .ShowHideTransitionViews) {fertig in

}

Sie könnten die (eine andere Ansicht machen wollen) gleich der Größe des frontView

Verwandte Themen