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

ios - 视图中的 UIButton 动画未检测到触摸

我正在按照教程创建交互式弹出动画(http://www.swiftkickmobile.com/building-better-app-animations-swift-uiviewpropertyanimator/),现在想向弹出窗口添加按钮而不是教程中的静态文本。

动画效果很好,但按钮没有检测到触摸。触摸按钮会导致动画反转,而不是打印我的“测试”语句。从研究来看,它看起来要么是视图层次结构的问题,要么是禁用按钮触摸的动画,要么是按钮的布局/约束问题。我已经尝试解决上述问题,但没有任何效果,希望有人能够提供帮助吗?

我省略了与动画有关的代码,因为我认为问题与布局有关(并且动画似乎工作正常) - 但它仍然很多;提前为大量代码道歉。

***对于其他有同样问题的人,这就是我解决它的方法,感谢@OverD:我完全删除了reviewsImageView(因为在我的情况下这仅用于颜色,我可以轻松地将颜色添加到 UIButton ) 然后,我没有将按钮添加到 popupView,而是将它们添加到堆栈视图,并将堆栈视图添加到 popupView。最后,我的 addTarget 语法不正确,并且出于某种原因将其更改为 touchDown 而不是 touchUpInside 使其工作。

0 投票
1 回答
459 浏览

ios - 如何在 CABasicAnimation 结束之前重置它?

我有一个 CAShapelayer 圆圈,我将它作为一个进度圆圈动画,CABasicAnimation 从 0 度回到 360 度,同时在状态机中使用具有重置、播放、暂停和完成状态的倒数计时器。

现在,我可以播放或暂停和恢复,直到计时器结束并且动画完成并且模型恢复到其原始值,然后选择另一个倒计时计时器值以开始动画。

但是,如果我播放然后在动画完成之前的任何时间重置,它会取消,但是当我再次播放时,动画不再起作用。我注意到由于某种原因在动画完成之前我重置后,我的 strokeEnd 不再从 0.0 开始,而是得到一个看似任意的小数点值。我认为这是我的问题的根本原因,但我不知道为什么 strokeEnd 值是这些随机数。这是 strokeEnd 值的屏幕截图 - https://imgur.com/a/YXmNkaK

这是我到目前为止所拥有的:

这是我在状态机中设置它的方式,以防错误与此有关:

0 投票
1 回答
547 浏览

ios - 将设置 UIView 属性显式停止/完成在同一属性上使用 UIViewPropertyAnimator 启动的现有动画

我目前的 iOS 开发知识水平是我对它还很陌生,并且处于学习阶段。提供此信息,以便专家可以相应地回答:)

根据斯坦福的 iOS 开发课程,如果针对同一属性启动另一个动画,则 UIView 属性的动画将被中断(更具体地说,新动画开始处理前一个动画的一个属性)。

链接到视频中教授这一点的确切点https://youtu.be/84ZhYhAwYqo?t=209

同样相当相似的事情也被说成是对 stackoverflow 问题的回答。直接链接回答https://stackoverflow.com/a/3076451/8503233

但是当我尝试这样做时,它没有发生。

为了测试这一点,我制作了一个简单的应用程序,单击按钮开始使用 UIViewPropertyAnimator.runningPropertyAnimator 为视图设置动画,其中将 alpha 更改为 0。持续时间设置为 10 秒,以便我有足够的时间来触发另一个动画。

然后另一个按钮将启动一个动画,将同一视图的 alpha 更改为 1。我预计当第二个动画开始时,它会导致第一个动画停止并使用 UIViewAnimatingPosition 的值为 .current 调用其完成处理程序.

但是我发现即使第二个动画开始时,第一个动画仍在运行,并且在运行了完整的持续时间后,完成处理程序被称为 UIViewAnimatingPosition 作为 .end。

这与我在上面给出的资料中所读到的完全相反。请帮忙。这里到底发生了什么。如果要求,将共享应用程序代码。谢谢!!!

编辑1:

查看控制器代码

测试步骤:

在模拟器中,我按下 Animate1 按钮,然后大约 1 秒后,按下 Animate2 按钮。

控制台输出:

在@matt 的评论中,动画现在是附加的。这澄清了很多事情,但苹果的addAnimations(_:delayFactor:)文档说,我引用

如果动画块修改了由不同属性动画师修改的属性,则动画师以最合适的方式组合他们的更改。对于许多属性,来自每个动画师的更改被加在一起以产生一个新的中间值。如果无法以这种附加方式修改属性,则新动画将接管,就好像已经为基于视图的动画指定了 beginFromCurrentState 选项一样。

因此,如果一个新动画隐式或显式地作为 beginFromCurrentState 接管,那么当新动画接管时,第一个动画不应该以 .current 状态停止吗?

0 投票
1 回答
790 浏览

ios - 交互式 UIView 翻转过渡

我有一张卡片的正面和背面。我像这样动画两者之间的过渡:

这完美地工作。但是,我想让这个动画具有交互性,这样如果用户在卡片上水平平移,翻转动画将按比例推进。通常,我会使用UIViewPropertyAnimator.

是否可以使用UIViewPropertyAnimator,或者是否有其他替代方法可以使翻转互动?

0 投票
1 回答
96 浏览

swift - 从海量视图控制器中重构 Swift UIViewPropertyAnimators

我正在尝试重构我现在有 >900 行(太多)的 Swift 大型视图控制器。

如何将我的UIViewPropertyAnimators(约 100 行)的创建与我的 main分开UIViewController?问题是UIViewPropertyAnimators需要对view属性的引用并且UIViews它们正在制作动画。我是否创建了struct一个weak var我通过依赖注入分配view引用的 a?我还需要以UIView某种方式引用对象。不确定在不产生循环性的情况下重构它的最佳方法是什么。有任何想法吗?

加法

由于所有动画师只与窗口的一部分相关,我现在创建了一个子视图控制器并将动画师移到那里。我认为这也是一个可行的解决方案。我不得不添加委托模式。最后,父视图控制器缩短了约 100 行,正如他们所说,我有“分离的关注”。

0 投票
0 回答
45 浏览

ios - 当我重新启动 UIViewPropertyAnimation 时不要再次移动

首先,我点击开始按钮执行动画,它工作正常,但是当动画完成后,我再次点击开始按钮开始动画,它不起作用,并且没有调用动画块

0 投票
1 回答
51 浏览

ios - animator.startAnimation -- 这个警告是什么意思?

我正在尝试学习如何在 objc 中使用 UIViewPropertyAnimator。我用一个名为“blueBox”的对象制作了一个简单的测试应用程序。我想改变 blueBox 的属性。

我在@implementation 之外声明'animator' ... @end:

然后像这样定义它:

当我想使用它时,我会写:

它按预期工作(更改对象的颜色和框架),但在 'animator.startAnimation;' 上有警告 上面写着“未使用的属性访问结果 - 不应将吸气剂用于副作用”。指的是什么属性访问结果?我应该怎么写这样我就不会收到警告?

0 投票
2 回答
2938 浏览

ios - 暂停时调用 UIViewPropertyAnimator 完成

我用UIViewPropertyAnimator的不多(仍然是一个老式的积木人),而且我看到了一些我无法解释的行为,并且文档并没有真正提供任何见解。

为什么即使动画师在启动后立即finalPosition暂停,动画师的完成块也会被调用?.end

输出:

0 投票
1 回答
229 浏览

ios - NSLayoutConstraints 的 UIViewPropertyAnimator 使视图消失

我有一个这样设置的 UIViewPropertyAnimator viewDidAppear

我正在使用动画师在两组相互排斥的约束之间进行插值。我正在使用Pulley库作为抽屉,当拖动抽屉时,UIViewPropertyAnimatorfractionComplete会根据用户在drawerChangedDistanceFromBottomPulley 库的函数中向上移动抽屉的距离进行更新,如下所示:

所描述的过程按预期工作,直到用户进入后台并返回应用程序。那时,我用约束制作动画的视图似乎只是消失了。我看到另一个问题表明 UIViewPropertyAnimator对生命周期做了奇怪的事情。也许是这样的事情导致了问题?

我也从不开始/完成动画师,我只是更新fractionCompletein drawerChangedDistanceFromBottom,也许我应该?虽然我不希望动画以 5 秒的持续时间实际运行,但我只想要一个可擦洗的动画。

0 投票
0 回答
114 浏览

swift - Swift 动态动画,后跟属性动画师

我有一个动画,我使用推送动画,然后使用快照动画UIDynamicBehavior,然后我以属性行为结束:

基本上上面的代码做了以下事情:

  • 添加推送行为
  • 移除推送行为
  • 添加捕捉行为
  • 删除所有行为
  • 添加属性转换

我想要的是执行推送操作,然后在大约一秒钟后执行快照行为,并在快照执行完成后执行转换。但是,如果我removeAllBehaviors()在执行属性转换之前,则快照行为不会完成。但是,如果我离开快照行为并尝试执行属性转换,则它没有任何效果,因为快照行为似乎无限期地作用于对象,使其与属性转换不一致。

我如何以编程方式说完成快照行为然后执行转换?