Frage

Ich habe eine benutzerdefinierte Schaltfläche auf einem Ansichts-Controller in der Hierarchie des Navigations-Controllers, die beim Drücken den sichtbaren Ansichts-Controller öffnet.

Ich möchte UIViews verwenden transform eigenschaft zum Animieren des Schließens des Ansichts-Controllers.Es funktioniert, aber wenn ich `popViewControllerAnimated: YES' verwende, ist die linke Standardfolie der Animation immer noch vorhanden, obwohl meine benutzerdefinierte Transformation auch funktioniert.

Wenn ich setze popViewControllerAnimated:NO es animiert überhaupt nichts.

Ich habe auch nachgesehen, ob ich benutze CATransition was funktioniert, wenn ich habe popViewControllerAnimated setzen auf NO, aber es gibt keinen "Zoom" -Effekt, der Teil der öffentlichen API ist, und ich möchte den privaten Effekt nicht verwenden.Benutzerdefinierte Filter sind auch nicht für das iPhone verfügbar, sondern nur für OS X.

Also ich denke, meine Fragen sind:

1) Gibt es eine Möglichkeit, die linke Folie im Standardübergang zu entfernen und dennoch eine benutzerdefinierte Animation zu verwenden transform?

2) Eine Möglichkeit, einen benutzerdefinierten Filter für zu verwenden CATransition?

3) Wenn ich eine private API für den Zoomeffekt verwende, wie wahrscheinlich ist es, dass Apple meine App in den Ablehnungskorb wirft?

Hat jemand eine Lösung, die ich übersehe?

War es hilfreich?

Lösung

Ich habe etwas Ähnliches gemacht wie das, was du beschreibst, d. H.ändern Sie die Standardanimation für Pop- und Push-Ansicht in UINavigationController.

Die Idee ist, die Standardanimation für das Objekt zu deaktivieren und durch eine eigene Animation zu ersetzen.Ich habe eine neue Kategorie für UINavigationController erstellt und eine ähnliche Funktion wie die folgende verwendet.

 - (void) altAnimatePopViewControllerAnimated:(BOOL)animated
 {
[CATransaction begin];

CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush;          // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;

CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;


[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];



[self  popViewControllerAnimated:YES];
[CATransaction commit];
   }

verwenden Sie einfach den Code

   [self.navigationController altAnimatePopViewControllerAnimated:YES];

Um einen Push auszuführen, erstellen Sie einfach eine andere ähnliche Funktion und kehren Sie die Animation um.

Es ist nicht perfekt, aber es funktioniert.Wenn Sie verschiedene Animationstypen auswählen, spielen Sie mit den verschiedenen Unteransichten herum, die die Navigationsleiste / den Controller bilden, um sie perfekt zu machen.

Ich habe ziemlich viel Weiß gebraucht, um mir das auszudenken, also benutze es mit Bedacht :)

******* BEARBEITEN

Versuchen Sie, den Push-Übergang durch diesen zu ersetzen (habe es selbst nicht versucht):

  CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
  scale.duration = duration;
  scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
              [NSNumber numberWithFloat:1.2f],
              [NSNumber numberWithFloat:.85f],
              [NSNumber numberWithFloat:1.f],
              nil];

Dies wird einen Pop-in machen, d.h.die Ansicht wird größer, bevor sie sich auf die richtige Größe eingestellt hat.Spielen Sie mit den Werten im Array, um die Kurve der Animation zu steuern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top