问题标签 [custom-transition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 在 AnimationController 中使用 Core Animation 时 iOS UINavigationController 自定义 InteractionController 无法正常工作
我有自定义动画控制器用于我的 NavigationController 中的转换,我想让它具有交互性,所以我创建了一个自定义交互控制器,它适用于其中一些控制器,但在我使用 CoreAnimations 执行动画的那些控制器中它不能正常工作。
它自己开始和结束动画,因为在交互控制器finish()
中没有被调用,我留下了一个黑屏。
这是 AnimationController 中的代码:
在我的 CAAnimationDelegate 中:
最后是交互控制器:
我究竟做错了什么?
ios - UINavigationBar 彩色动画与推送动画同步
我想在具有不同UINavigationBar
背景颜色的视图之间实现平滑的动画。嵌入式视图具有相同的背景颜色UINavigationBar
,我想模仿推送/弹出过渡动画,例如:
我准备了自定义过渡:
并在UINavigationControllerDelegate
方法实现中返回:
虽然推送动画效果很好,但流行音乐却没有。
问题:
- 为什么在弹出动画之前清除 NavBar 颜色后它仍然是黄色的?
- 有没有更好的方法来实现我的目标?(导航栏不能一直透明,因为它只是流程的一部分)
这是我在 GitHub 上的测试项目的链接。
编辑
这是 gif,展示了所讨论问题的全貌和预期效果:
android - Xamarin Forms Android - 在离开屏幕时保持弹出页面可见
我正在尝试将原生感觉动画添加到我的 xamarin 表单应用程序中,以添加专业的完成效果。
我已经使用以下代码覆盖了导航页面渲染器以实现我自己的过渡动画...
我的问题是,当我使用 Navigation.PopAsync() 弹出一个页面时,弹出的页面在它有机会制作动画之前就被隐藏了。这意味着进入页面正在飞入一个空视图,而不是从当前页面后面出现。
有没有人有解决方法?
动画如下...
enter_from_left.xml
enter_from_right.xml
exit_to_left.xml
exit_to_right.xml
ios - 呈现视图控制器时键盘通知不一致
我有一个A
当前处于编辑模式的视图控制器,即它有一个当前是第一响应者的文本字段。
现在我使用自定义动画师展示视图B
控制器A
:
为简单起见,这个动画师没有做太多动画:它只是将目标视图控制器的视图添加到层次结构中,仅此而已。
视图控制器B
也有一个文本字段,当它出现在屏幕上时,我希望它立即成为第一响应者。因此,我将此代码添加到视图控制器B
:
现在有趣的部分是之间发生了什么
和
1. 根视图内部
当视图控制器A
中的文本字段放置在其根视图内的任何位置时,这些是我收到的键盘通知NotificationCenter
:
换句话说:将目标视图控制器的视图添加到转换的容器视图会导致所有这些键盘通知被触发。这很棒,因为之后我可以更新B
的布局以考虑键盘并将这些布局更改应用于我的过渡动画。
2. 集合视图单元内部
但是,当文本字段放置在视图控制器的集合视图单元A
中时,在转换期间不会收到键盘通知:
无论如何,这些是我在过渡动画开始之前收到的通知:
这是有问题的,因为在第二种情况下,视图控制器B
仍然“认为”键盘在动画期间是隐藏的。因此,我无法布局其视图并创建正确的动画。
知道为什么在场景 2 中没有触发键盘通知以及如何解决这个问题吗?
xcode10 - Xcode 10:自定义动画过渡卡住了
我的应用程序有两个视图控制器(VC A 和 B)以及它们之间的自定义转换。
在 VC A 上使用向左平移手势时,交互式动画过渡以模态方式呈现 VC B 在 A 上从右侧滑入(从右到左)。要解除 VC B,用户可以:
- 使用向右平移手势:将触发交互转换,将 VC B 滑回右侧并露出 VC A。VC B 的位置由平移手势状态交互确定。交互由
UIPercentDrivenInteractiveTransition
对象“驱动”。 - 使用 VC B 导航栏上的“关闭”按钮。这将触发自定义过渡(向右滑动),没有交互(只是动画)。
问题是在 Xcode 10 Seed (build 10A254a) + iOS 12 Simulator (X or XR or XS) 上进行测试我可以很容易地进入自定义转换永远不会完成并且 UI 处于奇怪状态的状态:
- UI 卡在 VC B 上,没有手势或点击工作。
- 该应用程序没有卡住 - 我可以看到控制台日志仍在滚动并且网络活动正在运行(日志中没有错误)
- 在这种卡住状态下暂停应用程序我可以看到 com.apple.main-thread 没有卡住。
- 当我点击“Debug View Hierarchy”时,发生了一些奇怪的事情:在模拟屏幕上我仍然可以看到VC B 并且所有 UI 都已禁用。在视图调试器主视图上 - 我可以看到绘制的 VC A 的子视图,就好像转换完成一样。在视图调试器左树视图上-我可以看到VC B 的视图层次结构。
此问题从未出现在任何先前版本的 Xcode 和/或 iOS pre Xcode 10/iOS12 上。
这是animateTransition
我自定义的方法UIViewControllerAnimatedTransitioning
打印件仅用于调试。
这是很容易重现问题的序列:
- 使用平移手势开始从 B 到 A 的交互式过渡,但从不完成 - 这将调用
cancel()
对象UIPercentDrivenInteractiveTransition
+ 我可以验证动画是否完成。 - 点击“关闭”按钮以调用非交互式过渡来关闭 B。B 永远不会关闭,并且自定义动画永远不会完成!
在设备上,我(还)根本无法重现这个问题——所有转换都按预期工作。
uinavigationcontroller - 导航控制器中的两个不同的自定义转换
我正在尝试在导航控制器中进行两种不同的自定义过渡(一种淡入淡出,一种从顶部滑动)。
过渡效果第一次非常好,但当弹出时过渡表现得很疯狂。我想 navigationController.delegate 是关键,但我自己无法弄清楚。任何帮助将不胜感激,非常感谢
************************************ IOS14 问题更新 *************** ******************************
再次您好,@Vlad 设置代表的解决方案非常感谢。
但是最近在 IOS14 中,当在导航返回按钮上检测到长按手势时会出现一个堆栈菜单(允许用户在导航控制器的视图控制器堆栈中导航)。
因此,当弹出两个或多个控制器时,navigationcontroller 委托设置为错误的控制器。
我再次请求您的支持;)
ios - 自定义呈现的 UINavigationController 在转换期间与 UICollectionView 的 contentOffset 发生故障
如您所见,在推送到下一个视图控制器之前, UICollectionView
in会出现奇怪的断断续续的偏移行为。topViewController
我怀疑问题可能出在自定义演示文稿上,UINavigationController
它显示了我从中推送的水平卡片。
这是如何下降的自定义代码。出现故障的视图控制器只是navigationController?.pushViewController(viewController, animated: true)
从顶部视图控制器的普通推送。
片段 A - 演示文稿
片段 B - 过渡代表
Snippet C - 演示控制器
Snippet D - 用于捕捉的自定义集合视图布局
我尝试禁用内容偏移调整,这并没有改变任何东西。我还尝试禁用maskToBounds
带有卡片的视图控制器和集合视图,但无济于事。抱歉问题太长了,我希望有人能帮我解决这个奇怪的故障!
ios - 无法在 Xcode 10/iOS 12 中进行自定义 segue
我很难在 iPhone 的屏幕上实现抽屉滑到一半的演示。
编辑:我发现 iOS 不尊重我在 Segue 中设置的 .custom modalTransitionStyle。如果我在 中明确设置prepareForSegue:
,那么它会调用我的委托来获取UIPresentationController
.
我有一个自定义 Segue,它也是一个 UIViewControllerTransitioningDelegate。在该perform()
方法中,我将目标 transitioningDelegate 设置为 self:
我要么调用super.perform()
(如果它是 Present Modal 或 Present as Popover Segue),或者self.source.present(self.destination, animated: true)
(如果它是 Custom Segue,因为调用super.perform()
会引发异常)。
perform()
andanimationController(…)
方法被调用,但从不被调用presentationController(forPresented…)
。
最初,我尝试使用指定的自定义 Segue 类在 Storyboard “Present Modally”中制作 Segue,但这一直在删除呈现视图控制器。我尝试了“Present as Popover”,我发誓它工作过一次,因为它没有删除呈现视图控制器,但在随后的尝试中它仍然有效。
所以我把它设为“自定义”,并且perform()
仍然_UIFullscreenPresentationController
在目标视图控制器上通过预设被调用,并且我的presentationController(forPresented…)
方法永远不会被调用。
处理此问题的其他解决方案始终取决于该方法的一些错误签名。这是我的,逐字逐句:
在过去的四天里,我一直在试图找出“正确的”自定义过渡,但事情似乎不像宣传的那样表现得无济于事。我错过了什么?
ios - 通过导航控制器使用自定义动画转换到 SecondViewController 后,SecondViewController 中的非活动视图
我有 2 个视图控制器(ViewController 和 SecondViewController)和 1 个导航控制器:
我的项目使用从 ViewController 到 SecondViewController 的自定义过渡动画:
在 ViewController(其中门图像)中,我使用延迟来启动过渡动画并转到 SecondViewController(其中绿色背景)。
SecondViewController 具有按钮按下功能:
动画正常工作,但 SecondViewController(绿色背景)不响应按钮按下。SecondViewController 中的代码
返回真。我的代码中的问题在哪里?我想按下按钮来工作。