问题标签 [uiviewpropertyanimator]

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.

0 投票
1 回答
360 浏览

ios - 如何使用关键帧链接动画

我希望堆栈视图的排列子视图以级联方式可见,但它们都同时出现:

我的期望是,即使我没有单独设置参数(并将它们设置为 0),也可以以均匀间隔的方式为每个关键帧设置选项calculationModePaced或为其设置动画。calculationModeCubicPacedwithRelativeStartTime

我尝试将选项更改为calculationModeLinear并手动设置withRelativeStartTime

但是,标签仍然同时出现。

0 投票
0 回答
73 浏览

ios - 为 UIViewPropertyAnimator 的 fractionComplete 设置大于 1 或小于 0 的值

我正在设置propertyAnimator?.fractionComplete根据平移手势的翻译来更改视图的位置。稍后,我打算CGPoint.zero在手指抬起后将其动画化。这是我的代码:

Dragging the square with the cursor

方形视图正在移动,但是当百分比高于1或低于0时,它会停止。这是有道理的,因为它的原始来源是CGPoint.zero,我用addAnimations().

但是,我希望它继续移动,即使分数完成了。在文档中它说:

定义自定义动画器时,如果您支持动画运行超过其起点或终点,则可以允许大于 1.0 或小于 0.0 的值。

我该如何启用它?我应该创建一个子类,如果是,我应该重写哪些方法?

0 投票
1 回答
170 浏览

ios - 使用 UIViewPropertyAnimator 同步动画 CALayer 属性和 UIView

我正在使用 aUIViewPropertyAnimator为视图的位置设置动画。但是,我还想为 CALayer 属性设置动画borderColor。目前,它没有动画并在开始时立即更改,如下所示:

GIF of a square moving right while the border instantly changes color

这是我的代码:

我查看了这个问题,How to synchronously animate a UIView and a CALayer,答案建议使用“显式动画,如基本动画”。它说,

如果两个动画的时间函数和持续时间相同,那么它们应该保持对齐。

但是,如果我使用CABasicAnimation,我将失去 的所有好处UIViewPropertyAnimator,例如计时和中途停止。我还需要跟踪两者。有没有办法用 动画CALayer属性UIViewPropertyAnimator

0 投票
0 回答
40 浏览

ios - UIScrollView 不应该使用不相关的 UIViewPropertyAnimator

我正在使用 UIScrollView,其内容是一个简单的 UIView 子类,其大小使用自动布局设置,并使用 drawRect: 来呈现其内容,而不是拥有自己的子视图。

如果 UIView 的内容(和大小)发生变化,那么一切都会按预期进行。如果内容的大小现在需要/不再需要滚动,新内容会立即出现,并且 UIScrollView 的可滚动性启用/禁用。

但是,如果屏幕上的其他地方正在播放动画,则事情将不再按预期工作。

在这种情况下,对 UIView 的更改将与其他动画一起进行动画处理。

因此,如果其他动画需要 2 秒,则新的 UIView 内容会立即重绘,但会按一定比例重新绘制,以使其适合旧内容的大小。然后它对内容进行动画处理,在 2 秒内增长(或缩小),以便在动画结束时其大小达到应有的大小。

有问题的“干扰”动画师在食物链中由 ViewController 拥有,并且 UIScrollView 及其内容 UIView 从未被告知 UIViewPropertyAnimator。

仅当内容更改与动画重叠时才会出现问题。如果该其他动画已完成(或尚未开始),则滚动视图中的内容会立即更新。

有没有人对此有所了解,或者也许可以建议一种方法来强制 UIScrollView 和/或其内容视图始终做自己的事情,并且如果一些不相关的 UIViewPropertyAnimator 在其他地方出现,则不要随顺?

编辑:一些额外的信息

动画代码较旧,最初使用 UIView.Animate 和一些滑动手势触发动画。在这种情况下,即使动画和内容大小更改重叠(使用完全相同的重现场景),新的(滚动内容)大小也会立即出现,并且不会链接到 UIView.Animate 动画。在 UIViewPropertyAnimator 代码中交换(并且不涉及任何手势识别器)触发问题并且内容大小更改变为动画。

0 投票
0 回答
281 浏览

ios - 如何创建可中断/可取消的自定义视图控制器转换?

我正在演示一个小型自定义视图控制器(它是一个菜单),如果您改变主意,我希望您能够在中途停止演示。

根据这个 WWDC 2016 视频,这样做应该很容易,只需要实现interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating并返回,比如UIViewPropertyAnimator.

但是,我认为情况并非如此。如果我在那里返回我的属性动画师,并以编程方式调用我的视图控制器在过渡的中途被解除,它会等到动画完全结束以发生解除动画。它不会中断。

*注意:这是使用“普通”动画控制器,而不是交互式动画控制器。根据视频,这应该没问题,它本质上不是交互式过渡”

我设置了相应的控制器,如图所示:

还有一个简单的演示控制器:

但正如我所说,如果我简单地呈现它,然后在 5 秒动画的 1 秒内将其关闭(表示有人在视图控制器之外点击以将其关闭中间过渡),则在动画完成之前不会发生任何事情。就好像它已排队,但在演示完成之前不会执行。

我是否误解了自定义视图控制器转换流程的核心部分?我必须使它成为交互式过渡吗?还有什么?如果需要交互式转换,我应该在哪里更新我的代码中的交互控制器的进度?使用手势很明显,但这只是“将 0 alpha 淡化为 1 alpha”的动画。

0 投票
0 回答
45 浏览

ios - 如何动画模糊效果直到一定强度?

我正在尝试对模糊效果进行动画处理,直到达到一定强度。.animate使用 的方法这样做UIView很简单:

,这里的问题是最终的模糊强度对我的需要来说太高了。有谁知道是否有另一种方法可以达到类似的效果,降低最终的模糊强度?

我能想到的一些方法:

  • 动画alpha属性,但显然苹果建议反对它;
  • 中途使用UIViewPropertyAnimator和停止动画,但我试图寻找一种方法来实现这一点但没有成功。我能想到的最好的事情是启动它,然后使用计时器将其暂停一半,但这对我来说似乎是一个非常糟糕的做法。
0 投票
1 回答
47 浏览

ios - 再次播放 UIViewPropertyAnimator 时出现问题

我有一个问题UIViewPropertyAnimator,设置如下:

我第一次按下按钮时,动画播放良好。然而,我第二次击中它(动画完成后)没有任何反应。动画师肯定已经停止运行(通过 print 语句检查),但它只是没有响应。

我在这里做错了什么?

0 投票
1 回答
26 浏览

ios - UIViewPropertyAnimator 开头有短动画片段

想象一下UIViewPropertyAnimator设置如下:

为此,我可以添加另一个以延迟开始,以主要结束的动画:

所以上面从 1 秒开始并持续 1 秒以完成主要。

问题

有没有办法添加一个UIViewPropertyAnimator从一开始就开始的动画,但持续时间只是主要动画师的一小部分?从 0 开始并仅持续 1 秒?

0 投票
0 回答
37 浏览

swift - 当 UIViewPropertyAnimator 运行时,具有按钮的子视图的 ScrollView 不可点击

我正在使用 scrollView 和 UIViewPropertyAnimator.runningPropertyAnimator 制作幻灯片动画,但我面临子视图按钮不可点击的问题,为了验证它是否来自动画,我停止了动画代码并且按钮开始触发它们的动作

下面是我正在使用的代码

0 投票
0 回答
34 浏览

swift - 使用切换按钮 Swift 反转 UIViewPropertyAnimator

使用下面的代码,我似乎无法运行反向动画。

第一次按下按钮时动画运行,但单击第二次时间print("remove")线时会打印但动画不会反转。我该如何解决?