我正在尝试编写一个使用自定义动画的应用程序,以便在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];
}
];
}
答案 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];
我最终得到的是一个空白的白色屏幕。
我假设我在“推动画”期间正在做的事情导致了这个问题,但我无法弄明白!救命啊!
谢谢!