本机推送转换显示源视图,并无缝转换到目标视图。
模态转换显示目标视图从底部覆盖源视图。
我想要一个适用于导航控制器的模态转换。
到目前为止,我有这个:
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
anim.duration = .2;
anim.autoreverses = NO;
anim.removedOnCompletion = YES;
anim.fromValue = [NSNumber numberWithInt:sourceViewController.view.frame.size.height];
anim.toValue = [NSNumber numberWithInt:0];
[sourceViewController.navigationController.view.layer addAnimation:anim
forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
这是我的segue子类中的-perform
方法。这样的问题是导航控制器推送几乎立即完成,并且在转换发生时,不显示任何源视图。我希望它看起来好像在重叠。
我认为可以使用Core Graphics截取屏幕截图并将其作为目标视图的超级视图,但我无法正常工作。
我也尝试使用其中一种UIView
动画方法:
[sourceViewController.view addSubview:destinationController.view];
[destinationController.view setFrame:sourceViewController.view.window.frame];
[destinationController.view setTransform:CGAffineTransformMakeTranslation(0, sourceViewController.view.frame.size.height)];
[destinationController.view setAlpha:1.0];
[UIView animateWithDuration:1.3
delay:0.0
options:UIViewAnimationOptionTransitionNone
animations:^{
[destinationController.view setTransform:CGAffineTransformMakeTranslation(0, 0)];
[destinationController.view setAlpha:1.0];
}
completion:^(BOOL finished){
[destinationController.view removeFromSuperview];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
}];
但同样,这有一个问题:在视图控制器实际被推入导航堆栈之前,导航栏不会显示。因此,当导航栏突然显示时,动画结束时会出现一种“跳跃”。
那么我有什么选择呢?
答案 0 :(得分:0)
我通过创建源视图图像并转换它的路径解决了这个问题。
另外,应该注意ios 7上不存在“flash”,因此没有太多自定义代码。