问题标签 [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 回答
2494 浏览

ios - UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?

iOS 10 有几个新的动画类。值得注意的包括UIViewPropertyAnimatorUISpringTimingParameters可以使用持续时间和时间参数创建属性动画器- 时间参数可以是弹簧参数的实例。

过去对 iOS 中弹簧动画 API 的一个常见抱怨是它们需要一个持续时间 - 真正的弹簧动画的持续时间应该由阻尼比和初始速度等弹簧属性确定。UISpringTimingParameters可以使用这些类型的参数创建。

我的问题UIViewPropertyAnimator当它的时间曲线是弹簧时,是否仍然使用你给它的持续时间?或者它会丢弃持续时间并使用弹簧参数来计算它吗?对于 Apple 而言,这将是一个奇怪的 API 决定,但如此接近为设计师提供他们想要的东西(真正的弹簧)却还没有完全实现(强制指定持续时间)似乎也很奇怪。

0 投票
1 回答
2216 浏览

ios - 动画期间的 UIView 中心位置

我想确定动画期间 UIVIew 的中心位置(视图的中间点)是什么。带有 UIViewPropertyAnimator 的动画如下:

如果我在动画期间打印 circle.center 属性,那么我得到的只是动画的目标位置,而不是真实位置。

在此打印之后,我在控制台上看到了这个:

(100.0, 100.0)

(100.0, 100.0)

...

如何在动画期间打印真实位置?

谢谢。

0 投票
0 回答
200 浏览

swift - UINavigationController 中的 UIViewPropertyAnimator

我在 UIVisualEffectView 上设置了一个 UIViewPropertyAnimator,以便使用滑块为其模糊设置动画。在以下情况下,此 UIViewPropertyAnimator 似乎不再有效:

  1. 使用滑块调整模糊度
  2. 呈现此模糊视图的视图控制器嵌入在导航控制器中
  3. 我在这个导航控制器上推了一个新控制器
  4. 返回模糊视图控制器
  5. 滑块不再工作

我尝试使用动画师的 stopAnimation 和 finishAnimation 功能,但没有运气。这是预期的行为吗?我想我可以通过在需要时(例如在 viewWillAppear、didDisappear 上)完全删除和重置模糊及其动画器来解决这个问题,但这似乎太错误了......!

github源代码

0 投票
2 回答
2140 浏览

ios - 有没有办法观察 UIViewPropertyAnimator 中对 fractionComplete 的更改

我一直在关注UIViewPropertyAnimatoriOS 10 中非常酷的新类。它可以让您轻松地执行暂停、恢复和反转飞行中的 UIView 动画等操作。过去,您必须操作系统创建的底层 CAAnimations 才能使用 UIView 动画执行此操作。

UIViewPropertyAnimator类有一个属性fractionComplete。它从 0.0(动画开始)到 1.0(动画结束)不等。如果更改该值,则可以从头到尾“擦洗”动画。

我在 Github 上有一个名为KeyframeViewAnimations的演示项目,它允许您使用滑块来使用相当神秘的 CAAnimation 技巧来回擦洗 UIView 和 CAAnimations。随着动画的运行,滑块从头到尾移动以显示动画的进度。该项目是在 Swift 发布之前用 Objective-C 编写的,但底层技术在 Objective-C 或 Swift 中是相同的。

我决定使用UIViewPropertyAnimator. 有一些怪癖,但它相当简单。我无法弄清楚如何干净地做的一件事是观察动画fractionComplete属性的进度,以便我可以随着动画的进行更新滑块。我尝试在属性上设置 KVO(键值观察)fractionComplete,但在动画完成之前它不会触发 KVO 通知。

我最终做的是设置一个以非常小的间隔运行的计时器,并重复查询UIViewPropertyAnimator' 的属性并随着滑块的进行更新滑块。fractionComplete它有效,但它不是一种非常干净的做事方式。如果有办法获得有关动画进度的通知会更好。

我希望我缺少一些东西。

您可以UIViewPropertyAnimator在 Github 上的这个链接中看到基于项目的项目:UIViewPropertyAnimator-test

从动画师那里获取进度值的代码是这样的代码:

我可能应该将上面的代码转换为使用CADisplayLink计时器而不是普通计时器(NSTimer),但我希望有更好的方法。

0 投票
1 回答
285 浏览

ios - UISpringTimingParameters 可以有反弹簧效应吗?

在涉足 UIViewPropertyAnimator 之后,我发现 .isReversed 只是像倒转电影一样向后播放动画。是否可以通过自定义立方计时参数将“弹性”应用于反向动画,该参数仅适用于反向动画?

0 投票
3 回答
6193 浏览

swift - 为 UIViewPropertyAnimator 的fractionComplete 设置动画,用于模糊背景

因此,当您在主屏幕上向下滚动并且背景模糊时,我使用新的 UIViewPropertyAnimator 和 UIVisualEffectView 来实现与 Spotlight 搜索相同的功能。

我正在使用 fractionComplete 属性来设置平移 UIView 时模糊程度的百分比。

并且模糊量以 0.0 - 1.0 之间的值变化。

但是当我取消平移手势时,我希望模糊从原来的位置动画回到没有模糊的位置(例如 ~ -> 1.0),持续时间大约为 0.4 毫秒。

现在我只是在取消平移手势时将 fractionComplete 设置为 1.0。相反,我想为它制作动画。
我已经尝试过 UIView.animate(withDuration.. 但它不会影响 UIViewPropertyAnimators 分数完成,这是模糊 UIVisualEffectView 的唯一方法。

有任何想法吗?

0 投票
1 回答
733 浏览

swift - 为什么在 UIViewPropertyAnimator 中使用“unowned”

因此,我一直在阅读有关 UIViewPropertyAnimator 的内容,在我一直在查看的示例中,他们执行了以下操作:

我不明白其中的“[unowned self, redBox]”部分。谁能解释一下我们用它做什么?

我知道 unowned 通常用于决定如何确定引用计数,并且它不能设置为 nil,因为引用将不存在一个没有另一个(作为弱的替代),但我不明白使用在这里,我不明白括号部分。在我看来,它是我正在制作动画的项目的数组,并且它位于其中的视图?

完整代码如下:

0 投票
1 回答
443 浏览

uiviewpropertyanimator - UIViewPropertyAnimator 动画运动取决于平移方向

大家好,我试图让我的动画根据用户平移的方式转到任一侧,但它不起作用,我不知道出了什么问题。当我只使用一个方向时,手势工作正常,但是当我将逻辑移动到 moveLabel() 函数时,它不再工作了。动画甚至没有开始。我的目标是拥有相同的动画(因为我将为其添加更多细节),但让这个特定的标签根据平移方向向左或向右移动。这是我现在的感冒

我怎么解决这个问题?

正在运行的代码:

}

0 投票
0 回答
1336 浏览

swift - UIViewPropertyAnimator 未按预期更新视图

这是一个 Swift Playground 代码,我还在 iOS 模拟器中对其进行了测试,以确保它不是 Playground 的问题。

设置属性fractionComplete会导致状态从inactive变为active。但是,如下所示,前两个调用的视图没有更新。只有第三次调用神奇地更新了视图。

这种行为令人困惑,我寻求解释。

更新:将这两行放在第一次调用之前似乎是解决该问题的方法。

我认为这是一个内部错误。rdar://30856746

0 投票
1 回答
5130 浏览

swift - 什么时候使用 UIView 动画、CABasicAnimation 和 UIViewPropertyAnimator?

我想知道在哪些场景中我们应该使用它们中的任何一个作为最合适的?

在下面的博客https://www.hackingwithswift.com/ios10中,“Animations revisited”部分中编写的示例,我们可以使用“CABasicAnimation”重新应用相同的要求,即暂停和恢复动画吗?

根据我收集到的信息,当我们使用 UIView.animate(...) 方法时,它返回一个 void,因此我们将无法在动画完成之前控制动画,因为我们没有得到返回值来处理当我们进入 UIViewPropertyAnimator 时(另外,这里我们有“isRunning”来检查动画的进度。)同样在 CABasicAnimation 中,我们没有对正在运行的动画进行任何进度检查。如果我的假设是错误的,请纠正我。谢谢你。