Frage

Ich bin auf der Suche nach einem Weg, um eine UIViewAnimationTransitionCurlUp oder UIViewAnimationTransitionCurlDown übergang auf das iPhone, aber stattdessen von oben nach unten, tun Sie es von Links nach rechts (oder oben/unten im landscape-Modus).Ich habe gesehen, diese gebeten, in das internet ein paar mal, aber keiner scheint eine Antwort bekommen.Aber ich glaube, das ist machbar.

Ich habe versucht, die änderung der Ansicht ist, transformieren und den Blick.Ebene verwandeln, aber das hat keinen Einfluss auf den übergang.Seit dem übergang ändert sich, wenn das Gerät änderungen, die Orientierung, die ich vermute, gibt es eine Möglichkeit, zu täuschen, das Gerät zu bedienen die Landschaft übergang in den portrait-Modus und Umgekehrt?

War es hilfreich?

Lösung 2

ich es tatsächlich geschafft, diesen Effekt zu erreichen, indem die Ausrichtung meiner UIViewController ändern. Das Merkwürdige ist, hatte ich meinen Controller in einer anderen nesten, wenn es nicht funktioniert, aber wenn ich ihn als die unmittelbaren View-Controller gesetzt, es hat funktioniert.

Code, der es tut:

In einem UIViewController, die der Haupt-View-Controller in meiner AppDelegate ist und nur im Querformat (wie Sie in der zweiten Methode siehe unten) Ich habe folgend:

-(void)goToPage:(int)page flipUp:(BOOL)flipUp {

     //do stuff...

     // start the animated transition
     [UIView beginAnimations:@"page transition" context:nil];
     [UIView setAnimationDuration:1.0];
     [UIView setAnimationTransition:flipUp ? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown forView:self.view cache:YES];

     //insert your new subview
     //[self.view insertSubview:currentPage.view atIndex:self.view.subviews.count];

      // commit the transition animation
      [UIView commitAnimations];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Andere Tipps

Es ist möglich, Locken in einer der vier Richtungen zu tun, indem sie einen Container-Ansicht. Stellen Sie die Transformation des Containers im Hinblick auf den gewünschten Winkel und führen Sie dann die Locke von Ihrer Ansicht nach in den Behälter Ansicht hinzufügen, nicht Ihrer App-Hauptansicht, die keinen transformierten Rahmen hat:

NSView* parent = viewController.view; // the main view
NSView* containerView = [[[UIView alloc] initWithFrame:parent.bounds] autorelease];
containerView.transform = CGAffineTransformMakeRotation(<your angle here, should probably be M_PI_2 * some integer>);
[parent addSubview:containerView]; 

[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:containerView cache:YES];
[containerView addSubview:view];
[UIView commitAnimations];

Ich kämpfte auch mit diesem. Um die Locke von rechts zu kommen, oder Sie verlassen kann eine Zwischen Ansicht erstellen und transformieren. Also, lassen Sie uns sagen, dass die Aussicht Sie Übergang (myView) ist ein Kind des Hauptfensters (parentView):

-parentView
-->myView

Sie erhalten eine Zwischenansicht dazwischen (leicht getan im Interface Builder) einfügen:

-parentView
-->containerView
--->myView

Verwenden Sie dann den folgenden Code, um den Behälter 90 Grad nach links und der transitioned Ansicht 90 Grad rechts zu drehen:

containerView.transform = CGAffineTransformMakeRotation(-M_PI_2);
myView.transform = CGAffineTransformMakeRotation(M_PI_2);

myView noch aufrecht erscheinen dem Benutzer aber der Übergang wird denken, es bei 90 Grad von links angewendet wird.

Beachten Sie, dass je nachdem, wie auto-Skalierung Ihre Ansichten sind, können Sie die Rahmengrößen nach dem Anwenden der Transformation beheben müssen, zB

  containerView.frame = CGRectMake(0.0, 0.0, 768.0, 1024.0);
  myWebView.frame = CGRectMake(0.0, 0.0, 768.0, 1024.0);

Hoffe, das hilft. Das ist der nächste Sie UIViewAnimationTransitionCurlLeft und UIViewAnimationTransitionCurlRight erhalten können.

Ich habe versucht, die Lösung von fluXa auf iOS5 (So hatte ich die Verwendung [UIView trans......]) aber es hat nicht funktioniert:die LOCKE ging noch nach oben oder unten.Anscheinend ist der übergang nun nehmen Sie nicht die Transformation der Blick ins Konto.Also, falls jemand anderes tun will, den gleichen trick auf iOS5, die Lösung ist das hinzufügen einem anderen Behälter, in zwischen, und animieren Sie den übergang von dort aus.

Hier ist mein code, die ist ein bisschen spezifisch, da will ich curl 'bis' auf der linken Seite, aber mit der unteren Ecke curling.Als ob ich es bin reißen Sie eine Seite aus einem Notizbuch.

UIView* parent = self.view; // the main view
CGRect r = flipRectSize(parent.bounds);
UIView* containerView = [[UIView alloc] initWithFrame:r];
CGAffineTransform t = CGAffineTransformMakeRotation(-M_PI_2);
t = CGAffineTransformTranslate(t, -80, -80);
containerView.transform = CGAffineTransformScale(t, -1, 1);
[parent addSubview:containerView]; 

UIView* container2 = [[UIView alloc] initWithFrame:r];
[containerView addSubview:container2]; 

UIImageView* v = [[UIImageView alloc] initWithFrame:r];
v.image = [UIImage imageWithCGImage:contents.CGImage scale:contents.scale orientation:UIImageOrientationLeftMirrored];
[container2 addSubview:v];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [UIView transitionWithView:container2
                      duration:DURATION_CURL_ANIMATION
                       options:UIViewAnimationOptionTransitionCurlUp
                    animations:^{
                        [v removeFromSuperview];
                    } completion:^(BOOL finished) {
                        if (completion) {
                            completion(finished);
                        }
                        [containerView removeFromSuperview];}];});

Hinweise:

  1. Ich muss zugeben, dass der affine transform: translate (80,80) keinen Sinn macht in meinem Kopf, aber es ist notwendig, für iphone, wahrscheinlich, wird nicht funktionieren auf dem iPad.
  2. flipSizeRect dreht die Breite und Höhe eines Rechtecks (Sie haben bereits, oder?)
  3. die dispatch_after ist notwendig, weil ich Hinzugefügt, um die container und dann entfernen möchten einen Blick von der Hierarchie.Wenn ich verlassen den Versand nichts belebt.Meine beste Vermutung ist, dass wir zuerst brauchen, damit das system machen eine layout-pass, bevor wir animieren können eine Entfernung.

Ich glaube nicht, gibt es eine Möglichkeit, eine benutzerdefinierte Animation über das Schreiben.

Noch wichtiger ist, sollten Sie wahrscheinlich nicht versuchen, es. Die Locke und curl unten sind Teil der Benutzeroberfläche Grammatik, die dem Benutzer mitteilt, dass eine Ansicht angehoben wird oder über die bestehende Ansicht hinstellen. Es ist wie eine Haftnotiz wird eingeschläfert werden soll und dann entfernt. Ein links <-> rechts curl wird höchstwahrscheinlich als etwas interpretiert werden wie eine Seite aus einem Buch zerreißt. Es werden die Nutzer verwirren.

Wenn Sie sich selbst zu finden versuchen, etwas in der Schnittstelle zu tun, dass die Standard-API nicht leicht tun, sollten Sie sich fragen, ob ein solches neues Verfahren etwas wichtiges zu Benutzer kommunizieren und ob es sich ähnlich wie die bestehende Schnittstelle Grammatik. Wenn nicht, dann sollten Sie nicht stören.

Ungewöhnliche Schnittstellen haben einen anfänglichen Wow-Faktor, aber sie führen zu Frustration und Fehler in Tag-zu-Tag-Nutzung. Sie können auch dazu führen, Apple-App zu verweigern.

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