Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在视图控制器之间转换时自定义动画_Ios_Objective C_Cocoa Touch_Uikit_Core Animation - Fatal编程技术网

Ios 在视图控制器之间转换时自定义动画

Ios 在视图控制器之间转换时自定义动画,ios,objective-c,cocoa-touch,uikit,core-animation,Ios,Objective C,Cocoa Touch,Uikit,Core Animation,我希望像这样在视图控制器之间创建转换。 我已经使用以下代码创建了转换,但无法实现以下结果 self.settings = [self.storyboard instantiateViewControllerWithIdentifier:@"settings"]; CATransition* transition = [CATransition animation]; transition.duration = 0.4; transition.type = kCATransitionPush;

我希望像这样在视图控制器之间创建转换。

我已经使用以下代码创建了转换,但无法实现以下结果

self.settings = [self.storyboard instantiateViewControllerWithIdentifier:@"settings"];
CATransition* transition = [CATransition animation];

transition.duration = 0.4;
transition.type = kCATransitionPush;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
transition.subtype=kCATransitionFromRight;


[[self navigationController].view.layer addAnimation:transition forKey:kCATransition];
[[self navigationController] pushViewController:self.settings animated:NO];

从iOS7开始,您可以自定义系统方法pushViewController和presentViewController的转换效果。例如,如果需要自定义推送效果,则
UINavigationControllerDelegate
中有一个名为

- (id<UIViewControllerAnimatedTransitioning> _Nullable)navigationController:(UINavigationController * _Nonnull)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController * _Nonnull)fromVC toViewController:(UIViewController * _Nonnull)toVC
-(id _可空)导航控制器:(UINavigationController*_非空)导航控制器动画控制器操作:(UINavigationControllerOperation)操作从viewcontroller:(UIViewController*_非空)从vc到viewcontroller:(UIViewController*_非空)到vc

将自定义动画添加到fromVC的视图中,并在适当的时间显示toVC的视图

您可以尝试以下代码:

self.settings = [self.storyboard instantiateViewControllerWithIdentifier:@"settings"];

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:0.80];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationTransition:
 UIViewAnimationTransitionFlipFromRight
                       forView:self.navigationController.view cache:NO];


[self.navigationController pushViewController:self.settings animated:YES];
[UIView commitAnimations];

虽然它不是表示答案的可直接实现的代码块,但本博客应帮助您完成创建自定义过渡的步骤:

此代码段仅执行UIViewAnimationTransitionFlipFromRight动画、曲线(UIViewAnimationCurveEaseInOut)在动画中没有显示任何效果。我使用了这种方法,并使用上面的代码在堆栈上推送了一个新对象。但我观察到的唯一效果是“fromVC被翻转了一点,而toVC是水平滑动的。”谢谢分享这个博客。我在谷歌上搜索了太多关于定制segue的内容。但我的问题仍然存在,就是要实现以下要求。你说的“以下要求”是什么意思?你的意思是你被困在如何真正实现你发布的gif上?这是一个需要弄清楚如何把动画分解成你需要做什么来完成它的问题,还是你有某种错误?是的,我一直在努力实现gif。