0

在我的应用程序中,我以这种方式显示不同的屏幕:

info = [[Info alloc]initWithNibName:@"Info" bundle:nil];
[self.view addSubview:info.view];

Info 是 UIViewController 的子类,所以我只是创建它并将其添加为当前视图的子视图。

当我想解雇它时,我只是这样做:

[self.view removeFromSuperview];

我不确定这是否是正确的做法,但昨天苹果在应用商店发布了另一个应用程序,该应用程序执行相同的操作来显示视图。

我的问题是,如何为视图之间的过渡设置动画,所以当我调用 addsubview 时,它会做动画吗?

我试过这个:

        info = [[Info alloc]initWithNibName:@"Info" bundle:nil];
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1.0];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                               forView:info.view
                                 cache:YES];
        [self.view addSubview:info.view];
        [UIView commitAnimations];

但它不工作,这不做任何事情。

4

4 回答 4

4

这不是管理视图层次结构的正确方法。您应该为此使用视图控制器方法(addChildViewController:& removeFromParentViewController)。然后你可以使用方法transitionFromViewController:toViewController:options:animations:completion:(或类似的东西)来做各种动画。

于 2013-06-25T09:42:49.500 回答
1

添加视图控制器的视图使用这个

ChildViewController * child = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                           forView:info.view
                             cache:YES];
[self.view addSubview:child.view];
[UIView commitAnimations];

[self addChildViewController:child];
[child release];//for NON ARC

删除视图使用这个...

for (UIViewController *childVC in [self childViewControllers])
{
    [childVC removeFromParentViewController];
}
[self.view removeFromSuperview];// YOU CAN ADD ANIMATIONS HERE
[self removeFromParentViewController];

希望这会对你有所帮助,它对我来说很好......

于 2013-06-25T10:02:22.137 回答
1

您可以在不使用导航控制器的情况下将 CATransition 用于那种动画下面是代码

Info *infoViewController = [[Info alloc]init];
CATransition *transition = [CATransition animation];
transition.duration = 0.50;
transition.timingFunction =
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromRight;
UIView *containerView = self.view.window;
[containerView.layer addAnimation:transition forKey:nil];
[self presentModalViewController:infoViewController animated:NO];

像这样,您可以在不使用导航控制器的情况下从左到右为视图设置动画。

于 2013-06-25T10:09:22.247 回答
0

你可以给 UIView 块动画一个镜头。像这样的东西:

[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionAllowUserInteraction  animations:^
     {
         requiredView.frame = CGRectMake(0, 300.0, 400.0, 180.0);

     } completion:^(BOOL finished)
     {
     }];

您可以设置视图的框架并将其放置在查看坐标之外,然后相应地更改框架以使UIView.

于 2013-06-25T09:53:39.967 回答