35

是否可以显示pushViewController动画外观presentModalViewController但具有背景功能pushViewController

4

5 回答 5

57

如果你想淡化动画,这种方法有效。

CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:gridController animated:NO];
于 2011-03-27T22:47:12.307 回答
49

试试这个 :

UIViewController *yourViewController = [[UIViewController alloc]init];

[UIView  beginAnimations: @"Showinfo"context: nil];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController: yourViewController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
于 2010-10-20T12:04:34.720 回答
24

为了显示 PushViewController 动画,下面的代码正在工作,

推送_

 ViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
 CATransition* transition = [CATransition animation];
 transition.duration = 0.4f;
 transition.type = kCATransitionMoveIn;
 transition.subtype = kCATransitionFromTop;
 [self.navigationController.view.layer addAnimation:transition
                                                    forKey:kCATransition];
 [self.navigationController pushViewController:VC animated:NO];

对于流行音乐

CATransition* transition = [CATransition animation];
transition.duration = 0.4f;
transition.type = kCATransitionReveal;
transition.subtype = kCATransitionFromBottom;
[self.navigationController.view.layer addAnimation:transition
                                            forKey:kCATransition];
[self.navigationController popViewControllerAnimated:NO];

但是有一个问题,它在上升/下降时显示浅黑色背景,正在处理
这个问题,一旦它在此处发布新代码。

于 2015-03-23T12:30:46.223 回答
1

对于所有在 Xamarin (C#) 中尝试的等效代码,来自上面@hardik Thakkar 的答案,在动画过程中有黑色背景的问题,一切都好。

流行音乐

    CATransition transition = CATransition.CreateAnimation();
    transition.Duration = 0.4;
    transition.Type = CAAnimation.TransitionReveal;
    transition.Subtype = CAAnimation.TransitionFromTop;
    this.NavigationController.View.Layer.AddAnimation(transition, nameof(CATransition));

推送

    CATransition transition = CATransition.CreateAnimation();
    transition.Duration = 0.4;
    transition.Type = CAAnimation.TransitionReveal;
    transition.Subtype = CAAnimation.TransitionFromBottom;
    this.NavigationController.View.Layer.AddAnimation(transition, nameof(CATransition));
于 2018-10-24T05:29:11.630 回答
0

您应该考虑执行以下操作:

ViewController *myVC = [[ViewController alloc] initWithFrame:OFF_SCREEN];
[navigationController pushViewController:myVC animated:NO];

其中 OFF_SCREEN 是屏幕下方的某个 CGRect,例如 (0, 481, 320, 480)。然后使用动画块将viewcontroller的view的frame.origin调整为(0, 0)。您可能希望在 viewDidLoad 或 viewDidAppear 中执行动画块。

于 2010-10-05T15:29:49.670 回答