UIView transitionWithView时髦的结果

时间:2011-08-08 14:44:10

标签: ios uiview uiviewanimationtransition

我正在尝试编写一个使用自定义动画的应用程序,以便在UINavigationController中的视图堆栈中的视图控制器之间进行转换。

现在,我正在添加相同视图的多个选项,只是为了让机制正常运行。

我的视觉目标如下:
1.创建一个新的“FirstVC”。
2.将[FirstVC view]的alpha值设置为0 3.在两个方向(垂直和水平)上将[FirstVC视图]的变换值设置为25%。

在动画块中,我想要完成的是:
1.在两个方向上将[OutgoingVC view]的变换值设置为500%(将其向上吹5次) 2.将[OutgoingVC view]的alpha值设置为0(淡出为空)。
3.将[FirstVC view]的变换值设置为1(将其恢复为原始大小)。 4.将[FirstVC view]的alpha值设置为1(淡入全彩色)。

这个动画的净效果应该是“首页”在“下一页/底页”爆炸(仅到全屏)时逐渐消失并逐渐消失。想法是用户掉头一层楼等。 “走得更远。”

我将动画速度降低到10.0秒,这样我就可以更好地处理正在发生的事情。

似乎在“OutgoingVC”(即顶视图)上发生的动画是正确的。然而,底部视图看起来很好(100%的屏幕尺寸和alpha = 1.0),但随后它继续前进并且似乎爆炸到4x / 5x并且也淡出到α的0。屏幕已经完全变黑,新的UIViewController(FirstVC)正确显示在屏幕上。

有谁知道为什么我的代码不会按照我想要的方式运行?

谢谢!

<小时/> 愚蠢的我!这是代码:

- (IBAction)AddNewScreenPressed:(id)sender 
{
    FirstVC *newViewController = [[FirstVC alloc] init];
    UIView *currentView = [self view];
    UIView *newView = [newViewController view];
    [newView setTransform:CGAffineTransformMakeScale(0.25, 0.25)];
    [newView setAlpha:0];
    [UIView transitionWithView:[self view]
                      duration:10.0
                       options:UIViewAnimationOptionCurveEaseInOut
                    animations:^{
                        [[self view] addSubview:newView];
                        [currentView setAlpha:0];
                        [currentView setTransform:CGAffineTransformMakeScale(5.0, 5.0)];
                        [newView setAlpha:1.0];
                        [newView setTransform:CGAffineTransformMakeScale(1, 1)];
                    }
                    completion:^(BOOL finished){
                        [[self navigationController] pushViewController:newViewController animated:NO];
                    }
     ];
}

2 个答案:

答案 0 :(得分:1)

您已将newView添加为currentView的子视图,因此您对currentView所做的动画也可能适用于newView - 它可能会扩展并更改其子视图的alpha,包括newView。你能否将newView的初始比例设为0.2,并在动画块中删除newView的重新缩放,那么它最终会达到1.0的比例?不知道该如何处理alpha,但是......

在看到下面的解决方案之后编辑 - 很高兴你已经有了它的工作,它是否可能更干净(如果你正在从屏幕抓取图像来处理你的观点),有一个单独的视图控制器来管理过渡,传递它是两个图像所以它可以在内部进行动画制作,所以你将它推到前面没有动画,从第一个视图的图像开始执行动画,以第二个视图的图像结束(这样你就可以在两个imageViews上做标准动画而不是控制器的整个视图),然后在完成后推送第二个视图控制器?

答案 1 :(得分:1)

在玩了一些之后,我已经超过了一个驼峰并遇到了另一个障碍。

我赞同jrturton的回答,因为这个问题确实与我在[自我观点]中添加新视图的事实有关。

我做的是在[自我视图]及其子视图之间添加缓冲区视图([自我BackView])。

然后,以下代码用于推送新的视图控制器:

- (IBAction)AddNewScreenPressed:(id)sender 
{
    FirstVC *newViewController = [[FirstVC alloc] init];
    UIView *newView = [newViewController view];
    [newView setAlpha:0];
    [newView setTransform:CGAffineTransformMakeScale(0.25, 0.25)];
    [[self view] addSubview:newView];
    [UIView transitionWithView:[self view]
                      duration:1.0 
                       options:UIViewAnimationOptionCurveEaseInOut
                    animations:^{
                        [[self BackView] setTransform:CGAffineTransformMakeScale(5, 5)];
                        [[self BackView] setAlpha:0];
                        [newView setTransform:CGAffineTransformMakeScale(1, 1)];
                        [newView setAlpha:1];
                    }
                    completion:^(BOOL finished){
                        [newView removeFromSuperview];
                        [[self navigationController] pushViewController:newViewController animated:NO];
                        [[self BackView] setTransform:CGAffineTransformIdentity];
                        [[self BackView] setAlpha:1];
                    }
     ];
}

现在,当然,我遇到了另一个问题,即弹出控制器。

当我弹出它们时,动画似乎工作得很好,但是当我到达终点(完成块)并执行以下操作时:
[[self navigationController] popViewControllerAnimated:NO];
甚至:
[[self navigationController] popViewControllerAnimatedYES];
我最终得到的是一个空白的白色屏幕。

我假设我在“推动画”期间正在做的事情导致了这个问题,但我无法弄明白!救命啊!

谢谢!

相关问题