Xcode自定义segue - 封面垂直对面(从上到下) - COMPLETE NEWBIE

时间:2012-12-29 12:51:51

标签: xcode segue

我已经尝试了一段时间来创建一个与封面垂直相反的自定义segue(创建一个从上到下的效果动画)。我查看了其他问题,google和youtube但是无法让它工作我对课程等是全新的,所以一步一步的指导或视频的任何帮助都会非常好。我相信这个URL正在尝试做一些类似于我想要的事情:

http://jrwren.wrenfam.com/blog/2012/02/01/storyboard-custom-segue-for-custom-pushviewcontroller-animation/,我无法让它发挥作用。

如果你们中的任何一个人都知道如何创建一个自上而下的封面的自上而下版本的segue,你可以帮帮我吗?

7 个答案:

答案 0 :(得分:8)

好吧,您可能想要创建一个UIStoryBoardSegue的子类,就像演练向您展示的那样,但是在Storyboard类下面#39; .m文件(实现)您需要以下代码作为 - (void)perform:method -

-(void)perform{
UIViewController *sourceViewController = (UIViewController *) self.sourceViewController;
UIViewController *destinationViewController = (UIViewController *) self.destinationViewController;
[sourceViewController.view addSubview:destinationViewController.view];
[destinationViewController.view setFrame:sourceViewController.view.window.frame];
[destinationViewController.view setTransform:CGAffineTransformMakeTranslation(0, -sourceViewController.view.frame.size.height)];
[destinationViewController.view setAlpha:1.0];

[UIView animateWithDuration:0.75
                      delay:0.0
                    options:UIViewAnimationOptionTransitionFlipFromTop
                 animations:^{
                     [destinationViewController.view setTransform:CGAffineTransformMakeTranslation(0, 0)];
                     [destinationViewController.view setAlpha:1.0];
                 }
                 completion:^(BOOL finished){
                     [destinationViewController.view removeFromSuperview];
                     [sourceViewController presentViewController:destinationViewController animated:NO completion:nil];
                 }];}

希望这很有帮助。

答案 1 :(得分:3)

基于@dmason82的回答,转换为Swift,并简化一点,这对我有用:

BluetoothDevice

答案 2 :(得分:2)

这是我使用Storyboard实现的对面封面垂直Segue

https://github.com/viccarre/OppositeCoverVerticalSegue

答案 3 :(得分:1)

嗨,我刚刚尝试了另外两个答案,但它并没有像你问的那样工作。 为了创建一个自定义segue看起来完全反向覆盖垂直(模态segue默认)我创建了这个代码:

- (void)perform
{
UIViewController *sourceViewController = self.sourceViewController;
UIViewController *destinationViewController = self.destinationViewController;


[sourceViewController presentViewController:destinationViewController animated:NO completion:nil];
[destinationViewController.view addSubview:sourceViewController.view];
[sourceViewController.view setTransform:CGAffineTransformMakeTranslation(0, 0)];
[sourceViewController.view setAlpha:1.0];

[UIView animateWithDuration:0.75
                      delay:0.0
                    options:UIViewAnimationOptionTransitionFlipFromBottom
                 animations:^{
                     [sourceViewController.view setTransform:CGAffineTransformMakeTranslation(0,destinationViewController.view.frame.size.height)];
                     [sourceViewController.view setAlpha:1.0];
                 }
                 completion:^(BOOL finished){
                     [sourceViewController.view removeFromSuperview];
                     }];

}


@end

答案 4 :(得分:1)

要完成dmason的回答并让你的控制器向相反方向展开 - 从它出现的地方回来,在显示的视图控制器中执行此操作:

[UIView animateWithDuration:0.75
                      delay:0.0
                    options:UIViewAnimationOptionTransitionFlipFromBottom
                 animations:^{
                     [self.view setTransform:CGAffineTransformMakeTranslation(0, -self.view.frame.size.height)];
                 }
                 completion:^(BOOL finished){
                     [self dismissViewControllerAnimated:NO completion:nil];
                 }
 ];

Bergy的回答并不适合我。

答案 5 :(得分:0)

dmason的答案很棒,如果你想添加一个展开的segue,这样你的模态在关闭时就能正常动画,你的表演动作可能就像这样(在一个新的自定义segue类中)

- (void)perform
{
    UIViewController *sourceViewController = self.sourceViewController;
    UIViewController *destinationViewController = self.destinationViewController;

    [sourceViewController dismissViewControllerAnimated:NO completion:nil];
    [destinationViewController.view addSubview:sourceViewController.view];

    [UIView animateWithDuration:0.75
                     animations:^{
                         sourceViewController.view.center = CGPointMake(sourceViewController.view.center.x, sourceViewController.view.center.y-600);
                     }
                     completion:^(BOOL finished){
                         [sourceViewController.view removeFromSuperview];
                     }
     ];
}

答案 6 :(得分:0)

我建议你使用Hero库来实现这一目标。它增加了很多动画和过渡,特别是在视图控制器之间:https://github.com/lkzhao/Hero/blob/master/README.md 有一个名为" Cover"的过渡,你可以选择方向(左,上,右,下)