0

我在任何地方都找不到这个。所以,如果你有关于它的信息,请给我一个链接。

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

问题是:“在我选择一个触发自定义segue(没有任何动画)到另一个视图控制器的按钮后,我如何才能制作这个按钮的动画(隐藏屏幕),它将运行它的按钮动画(来到屏幕边框)?”

我做了这样的:

1)理论:我为菜单按钮制作了一个IBAction,然后在这个IBAction中我调用了一个动画方法,它调用了一个performSegueMethod:。之后在新的 VC 中的 viewWillAppear 方法中调用一个动画方法(即来自源 VC 的几乎相等的方法)。所有这些都有效,但这看起来并不顺利。当目标 VC 替换源 VC 时,会出现此动画的问题。有一些瞬间,当一切看起来都是静止的,并且只有在这个动画开始之后。我不知道如何消除这个目标 VC 滞后。可能我必须在 segue 之前加载目标视图?我试图这样做,但可能是做错了什么,或者它只是不帮助我。

2) 练习:

第一视图控制器.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];

        }
    }];





}];


}

好的,那么自定义 segue 代码非常简单:

-(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" 在 secondViewController 中执行SegueWithIdentifier:nil 与 firstView 中具有相同名称的方法相同。

我正在寻找目标视图控制器的特定对象在转场之后的平滑动画。

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

希望,有人可以帮助我。

4

2 回答 2

0

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

于 2013-07-15T20:37:32.790 回答
0

尝试在方法中执行所有第一个视图控制器的动画perform

至于第二个视图控制器的动画,我认为除了在viewWillAppear(尽管我更喜欢viewDidAppear)中执行它之外没有任何其他“好”方法,因为在执行 segue 时未设置目标视图控制器的出口(它们将是零)。换句话说,您无法访问按钮,更不用说为它们设置动画了。

一种骇人听闻的方法是在[segue.destinationViewController view]之前调用,perform以便加载目标视图控制器的视图层次结构并设置出口。然后也许,您可以在将目标视图控制器中的按钮perform推送到导航堆栈之前对其进行动画处理。

于 2013-07-05T00:35:13.480 回答