2013-07-04 51 views
0

我无法在任何地方找到它。所以,如果你有关于它的信息,请给我一个链接。iOS:视图控制器之间的动画

我有一个视图控制器,我做了一个简单的游戏菜单。它上面有一些按钮。 我有另一个视图控制器,也有一些按钮。

现在的问题是: “我选择一个按钮触发自定义继续(没有任何动画)到另一个视图控制器,它会运行它的按钮后,我怎么能做这个按钮的动画(隐藏屏幕)动画(从屏幕边框进入屏幕)?“

我在此是这样的:

1)理论值:使一个IBAction为用于菜单按钮,则在该IBAction为我调用一个动画制作方法,其中所说的performSegueMethod :.之后,在新的VC中,viewWillAppear方法调用动画方法(与源VC几乎相同的方法)。所有这些都有效,但这看起来并不平坦。当目标VC替换源VC时,出现此动画的问题。当所有看起来都是静态的,并且只有在这个动画开始之后,才会有一秒钟。 我不知道如何去除这个目标的VC滞后。可能是我必须在加载之前加载目标视图?我试图做到这一点,但可能是一个错误,或只是不帮助我。

2)做法:

firstViewController.m:

- (IBAction)newGameSegueButton { 

[self menuSlideInDirection:@"CenterToLeft" performingSegueWithIdentifier:@"mode"]; 

} 


-(void)menuSlideInDirection:(NSString *)direction performingSegueWithIdentifier:(NSString *)segueIdentifier 
{ 


[UIView animateWithDuration:0.4 animations:^{ 

    CGPoint newGameButtonCenter; 
    newGameButtonCenter.x = directionIndex * 160; 
    newGameButtonCenter.y = self.gameButtonSlide.center.y; 
    self.gameButtonSlide.center = newGameButtonCenter; 

    [UIView animateWithDuration:0.3 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
     //some animation too 

    } completion:nil]; 


    [UIView animateWithDuration:0.2 delay:0.2 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
     //animation 

    } completion:nil]; 


    [UIView animateWithDuration:0.1 delay:0.3 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
     //some animation too 

    } completion:^(BOOL finished){ 

     if(segueIdentifier){ 
      [self performSegueWithIdentifier:segueIdentifier sender:self]; 

     } 
    }]; 





}]; 


} 

好,然后自定义赛格瑞代码非常简单:

-(void)perform 
{ 


UIViewController *src = self.sourceViewController; 
UIViewController *dst = self.destinationViewController; 

[src.navigationController pushViewController:dst animated:NO]; 


} 

而且我secondViewController.m:

-(void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 


[self menuSlideInDirection:@"RightToCenter" performingSegueWithIdentifier:nil]; 

} 

menuSlideInDirection:@“RightToCenter”performSegueWithIdentifier:secondViewController中的nil与firstView中具有相同名称的方法相同。

我正在寻找流畅的目标视图控制器的特定对象的动画。

可能是做错了,还有另一种方式来做到这一点? (我只想将目标VC的所有视图和所有控件添加到源VC并删除“目标VC”)。

希望有人能帮助我。

+0

你对新视图控制器进行的segue转换是什么? –

+0

嗯,我想我不使用任何segue过渡,你可以在我的执行方法中看到。我理解你了吗? –

+0

你正在调用'performSegueWithIdentifier:'。这是一种推动,莫代尔?它是什么样的?再一次,这可能没有关系;我只是好奇而已。您将两个视图置于相同的VC下都是正确的,这会将整个过程置于您的控制之下,并确保您的流畅。否则,你可以做Roshan建议的黑客攻击。 –

回答

0

对于我的问题,我选择在同一个VC下放两个视图的方式。动画很流畅,看起来比使用perform/viewWillAppear方法要好得多。

0

尝试在perform方法中做所有第一视图控制器的动画。

至于第二个视图控制器的动画,我认为没有任何其他'好'的方法比在viewWillAppear(尽管我更喜欢viewDidAppear)中做它更好,因为目标视图控制器的插座在执行时未设置赛格(他们将是零)。换句话说,你没有办法访问你的按钮,更不用说动画了。

一个诡异的方法是在perform之前调用[segue.destinationViewController view],以便加载目标视图控制器的视图层次结构并设置出口。然后,也许你可以在perform中将目标视图控制器中的按钮设置为动画,然后将其推送到导航堆栈上。

+0

如果我在自定义的segue类中没有插入这个按钮,我怎么能在'perform'方法中做所有的第一个VC动画? –

+0

同样的问题为“hackish way”,并且目的VC出口 –

+0

我对吗,''[segue.destinationViewController view]'我必须添加以准备继续吗? –