Nic*_*lis 5 animation uiviewanimationtransition ios swift
我正在学习本教程,以了解如何为UIViewControllers进行交互式转换.
一切正常,但我发现有些闪烁.
我发现的第一个闪烁发生在你从右向左拖动屏幕时.这是因为平移手势将识别每次拖动并运行该panned(_:)方法,并将弹出或执行segue来更改控制器.我修复了id添加委托方法的问题gestureRecognizerShouldBegin(_:).
这确保了如果从右向左拖动,则手势永远不会开始(.Begin).
但现在我有一个不同的问题.如果我从左向右拖动(按预期)但不中断拖动,则从右向左改变方向,应取消转换.在这种情况下,在旧控制器再次出现之前,我可以看到新控制器的短暂闪烁.
如何优雅地取消交互式动画?
这是一个试图显示问题的视频.我找不到减慢这个动画的方法所以它非常快.
编辑
我试过两种不同的方法.
这其中使用CABasicAnimation到过渡动画效果.而这一个使用animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
每当我打电话时,它们都会闪烁 cancelInteractiveTransition
这是我解决问题的方法:
\n\n- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {\n[UIView animateWithDuration:[self transitionDuration:transitionContext]\n delay:self.interactive?[self transitionDuration:transitionContext]:0 // If zero, the animation briefly flashes in iOS 11.\n options:option\n animations:^{\n } completion:^(BOOL finished) {\n }];\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n最重要的是交互过渡中的延迟动画
\n
看下面的代码:我发现如果我们调用dismissViewControllerAnimated:YESin UIGestureRecognizerStateBegan,动画立即开始,如果我们不延迟动画\xe3\x80\x82 然后,在 中UIGestureRecognizerStateChanged,updateInteractiveTransition:progress会将视图带到“进度位置”\xe3\x80\x82 看起来一闪
switch (sender.state) {\n case UIGestureRecognizerStateBegan:\n _interactive = YES;\n [viewcontroller dismissViewControllerAnimated:YES completion:nil];\n break;\n case UIGestureRecognizerStateChanged:\n [self updateInteractiveTransition:progress];\n break;\n case UIGestureRecognizerStateEnded:\n {\n _interactive = NO;\n if (shouleFinish) {\n [self finishInteractiveTransition];\n } else {\n [self cancelInteractiveTransition];\n }\n }\n break;\n case UIGestureRecognizerStateCancelled:\n _interactive = NO;\n [self cancelInteractiveTransition];\n break;\n default:\n break;\nRun Code Online (Sandbox Code Playgroud)\n