【发布时间】:2016-01-28 17:20:28
【问题描述】:
我有一个容器视图——我们称之为 socket 视图——它有一个子视图,它是内容视图——我们称之为 plug 视图。此插头视图可以为 nil,即套接字视图当前为空。如果它确实包含一个插头视图,它会占用整个套接字的空间,即它的框架是套接字的边界。从外部的角度来看,你甚至不应该知道实际上有两个视图,因为插头视图总是正好在插座所在的位置。
我正在努力让动画正常工作:如果插件视图存在并且在动画之前布局,那么一切都会按预期工作。但是,如果我仅在动画已经运行时设置套接字的插头视图,我会得到不希望的效果:
插头视图布局到动画结束时的位置,并且不会在其插座旁边进行动画处理。我希望它看起来一直存在,但只是现在才可见,即插头视图(及其子视图)应该与套接字一起动画,即使我在动画进行时添加它也是如此。
我怎样才能实现这种行为?
我的想法:显然插头视图必须布局两次:一次用于其最终位置,另一次用于套接字视图开始动画的位置或添加位置。我可以计算这个帧,在没有动画的情况下应用它,并在一个新的动画块中为最后一帧设置动画。为了使动画时间保持一致,我需要具有相同的曲线和持续时间,但在过去开始动画或以某种方式向前。这可能吗?是否有其他方法可以让插件视图始终保持全宽和全高?
作为 Rob 回答的后续行动,以下是我正在寻找的更多详细信息:
套接字视图正在动画,因为它的所有者的绑定大小已更改。您可以将其视为表格视图中的全角单元格。
插件视图可能包含其自己的子视图,例如图像视图、标签等。这些也应该加入到套接字视图的动画中,就好像它们从动画开始就一直存在一样。
虽然理论上可以在一个已经运行的动画中启动一个新动画,但我并不介意这种极端情况下的行为。
在动画运行时,用户不必与插件视图交互;无论如何,这很可能发生在界面方向更改期间。
插件视图可能会因为动画时的异步模型更新而决定更改其内容,但这又是一个极端情况,我不介意在这种情况下动画看起来不完美。但是,它的大小不会改变 - 它始终与插头视图的大小相同。
【问题讨论】:
-
你能把你的动画代码贴在这里吗...
-
@KusalShrestha 我只是在动画块内将套接字视图的框架设置为不同的大小,没有什么特别的。
-
界面方向变化的动画持续时间为 0.3 秒。为什么你这么关心在动画中间插入一个视图?
-
我并不想在这个问题上成为一个混蛋,顺便说一句。甚至 Apple 也不会尝试在旋转期间为每个 UI 元素设置动画。尝试在 Safari 中调出位置/搜索框的键盘,然后旋转。它隐藏了一堆东西,旋转,然后重新显示隐藏的东西。
-
@robmayoff 我是一个完美主义者。这没什么大不了的,这是真的,但我仍然希望它看起来很棒。我认为如果在旋转过程中出现的单元格比现有单元格更大或更小,这看起来很奇怪。
标签: ios uiview calayer uiviewanimation