尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue
Posted
技术标签:
【中文标题】尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue【英文标题】:Trying To Unwind a Custom Segue Using UIViewAnimationOptionTransitionFlipFromLeft 【发布时间】:2015-01-07 17:34:10 【问题描述】:我有一个自定义的转场:
-(void)perform
__block UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
__block UIViewController *destinationController = (UIViewController*)[self destinationViewController];
float duration = 0.5;
NSLog(@"FlipSegue.m - source:%@ dest:%@", sourceViewController, destinationController);
if (self.isUnwinding)
NSLog(@"FlipSegue.m - isUndwinding - Flipping View 2 to View 1");
//[sourceViewController.navigationController dismissViewControllerAnimated:NO completion:nil];
[UIView transitionWithView:sourceViewController.navigationController.view duration:duration
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^
[sourceViewController.navigationController dismissViewControllerAnimated:NO completion:nil];
completion:NULL];
else
NSLog(@"FlipSegue.m - Going Forward - Flipping View 1 to View 2");
//[sourceViewController.navigationController pushViewController:destinationController animated:NO];
[UIView transitionWithView:sourceViewController.navigationController.view duration:duration
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
completion:NULL];
我已经使用storyboard
设置了segue
和unwind segue
。
我已将UINavigationController
子类化,并且正在使用- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)
获得自定义展开转场
当我调用从View 1
到View 2
的segue 时,它按预期工作。
当我调用 unwind segue 时,View 2
翻转,但再次显示 View 2
。代码的isUnwinding
部分会触发,但View 1
不会再次出现。
任何有关如何解决此问题的提示将不胜感激。
【问题讨论】:
【参考方案1】:您是否在情节提要中设置了展开转场?
在 ViewController 1 中添加 - (IBAction)unwind:(UIStoryboardSegue *)segue;
。转到情节提要中的 view2。 Ctrl 从视图中拖动以退出。选择展开方式。转到情节提要中的大纲,然后单击您刚刚制作的展开转场。将其类更改为自定义 segue。
【讨论】:
- (IBAction)unwind:(UIStoryboardSegue *)segue
不是进入 ViewController 1 吗?
我注意到从 View1 到 View2,您使用的是 pushViewController,但从 View2 到 View1,您使用的是dismissViewController。 pushViewController 的反义词是 popViewController,dismissViewController 的反义词是 presentViewCONtroller。也许你正在混合它们? Dismiss 和 Present 用于模态序列。
越来越近了...将dismissViewController
更改为popToRootViewController
几乎可以让我到达那里。屏幕翻转,继续显示View 2
,但随后弹出View 1
。似乎我需要在翻转它之前让它弹出。如果我将popToRootViewController
放在transitionWithView:duration:...
之前,它会正确弹出到View 1
,但不显示动画。
我可能在这里找到了答案***.com/questions/3602434/…【参考方案2】:
正如@JoshGafni 所建议的,我可以通过使用popToRootViewController
并稍微修改一下代码来解决这个问题。 Push/Pop 正在工作,但如果不向现有代码添加其他问题,我无法让 Present/Dismiss 工作。
这是有效的最终结果:
if (self.isUnwinding)
NSLog(@"FlipSegue.m - isUndwinding - Flipping View 2 to View 1");
[UIView transitionWithView:sourceViewController.navigationController.view
duration:duration
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^
[sourceViewController.navigationController popToRootViewControllerAnimated:NO];
completion:nil];
else
NSLog(@"FlipSegue.m - Going Forward - Flipping View 1 to View 2");
[UIView transitionWithView:sourceViewController.navigationController.view duration:duration
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
completion:nil];
【讨论】:
很高兴它成功了!我不介意在某个地方投赞成票:)以上是关于尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试使用 ansible ping 我的 VM 时,它会尝试 ping 服务器 ID 而不是 IP