问题标签 [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.
ios - 视图中的 UIButton 动画未检测到触摸
我正在按照教程创建交互式弹出动画(http://www.swiftkickmobile.com/building-better-app-animations-swift-uiviewpropertyanimator/),现在想向弹出窗口添加按钮而不是教程中的静态文本。
动画效果很好,但按钮没有检测到触摸。触摸按钮会导致动画反转,而不是打印我的“测试”语句。从研究来看,它看起来要么是视图层次结构的问题,要么是禁用按钮触摸的动画,要么是按钮的布局/约束问题。我已经尝试解决上述问题,但没有任何效果,希望有人能够提供帮助吗?
我省略了与动画有关的代码,因为我认为问题与布局有关(并且动画似乎工作正常) - 但它仍然很多;提前为大量代码道歉。
***对于其他有同样问题的人,这就是我解决它的方法,感谢@OverD:我完全删除了reviewsImageView(因为在我的情况下这仅用于颜色,我可以轻松地将颜色添加到 UIButton ) 然后,我没有将按钮添加到 popupView,而是将它们添加到堆栈视图,并将堆栈视图添加到 popupView。最后,我的 addTarget 语法不正确,并且出于某种原因将其更改为 touchDown 而不是 touchUpInside 使其工作。
ios - 如何在 CABasicAnimation 结束之前重置它?
我有一个 CAShapelayer 圆圈,我将它作为一个进度圆圈动画,CABasicAnimation 从 0 度回到 360 度,同时在状态机中使用具有重置、播放、暂停和完成状态的倒数计时器。
现在,我可以播放或暂停和恢复,直到计时器结束并且动画完成并且模型恢复到其原始值,然后选择另一个倒计时计时器值以开始动画。
但是,如果我播放然后在动画完成之前的任何时间重置,它会取消,但是当我再次播放时,动画不再起作用。我注意到由于某种原因在动画完成之前我重置后,我的 strokeEnd 不再从 0.0 开始,而是得到一个看似任意的小数点值。我认为这是我的问题的根本原因,但我不知道为什么 strokeEnd 值是这些随机数。这是 strokeEnd 值的屏幕截图 - https://imgur.com/a/YXmNkaK
这是我到目前为止所拥有的:
这是我在状态机中设置它的方式,以防错误与此有关:
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 状态停止吗?
ios - 交互式 UIView 翻转过渡
我有一张卡片的正面和背面。我像这样动画两者之间的过渡:
这完美地工作。但是,我想让这个动画具有交互性,这样如果用户在卡片上水平平移,翻转动画将按比例推进。通常,我会使用UIViewPropertyAnimator
.
是否可以使用UIViewPropertyAnimator
,或者是否有其他替代方法可以使翻转互动?
swift - 从海量视图控制器中重构 Swift UIViewPropertyAnimators
我正在尝试重构我现在有 >900 行(太多)的 Swift 大型视图控制器。
如何将我的UIViewPropertyAnimators
(约 100 行)的创建与我的 main分开UIViewController
?问题是UIViewPropertyAnimators
需要对view
属性的引用并且UIViews
它们正在制作动画。我是否创建了struct
一个weak var
我通过依赖注入分配view
引用的 a?我还需要以UIView
某种方式引用对象。不确定在不产生循环性的情况下重构它的最佳方法是什么。有任何想法吗?
加法:
由于所有动画师只与窗口的一部分相关,我现在创建了一个子视图控制器并将动画师移到那里。我认为这也是一个可行的解决方案。我不得不添加委托模式。最后,父视图控制器缩短了约 100 行,正如他们所说,我有“分离的关注”。
ios - 当我重新启动 UIViewPropertyAnimation 时不要再次移动
首先,我点击开始按钮执行动画,它工作正常,但是当动画完成后,我再次点击开始按钮开始动画,它不起作用,并且没有调用动画块
ios - animator.startAnimation -- 这个警告是什么意思?
我正在尝试学习如何在 objc 中使用 UIViewPropertyAnimator。我用一个名为“blueBox”的对象制作了一个简单的测试应用程序。我想改变 blueBox 的属性。
我在@implementation 之外声明'animator' ... @end:
然后像这样定义它:
当我想使用它时,我会写:
它按预期工作(更改对象的颜色和框架),但在 'animator.startAnimation;' 上有警告 上面写着“未使用的属性访问结果 - 不应将吸气剂用于副作用”。指的是什么属性访问结果?我应该怎么写这样我就不会收到警告?
ios - 暂停时调用 UIViewPropertyAnimator 完成
我用UIViewPropertyAnimator
的不多(仍然是一个老式的积木人),而且我看到了一些我无法解释的行为,并且文档并没有真正提供任何见解。
为什么即使动画师在启动后立即finalPosition
暂停,动画师的完成块也会被调用?.end
输出:
ios - NSLayoutConstraints 的 UIViewPropertyAnimator 使视图消失
我有一个这样设置的 UIViewPropertyAnimator viewDidAppear
:
我正在使用动画师在两组相互排斥的约束之间进行插值。我正在使用Pulley库作为抽屉,当拖动抽屉时,UIViewPropertyAnimatorfractionComplete
会根据用户在drawerChangedDistanceFromBottom
Pulley 库的函数中向上移动抽屉的距离进行更新,如下所示:
所描述的过程按预期工作,直到用户进入后台并返回应用程序。那时,我用约束制作动画的视图似乎只是消失了。我看到另一个问题表明 UIViewPropertyAnimator对生命周期做了奇怪的事情。也许是这样的事情导致了问题?
我也从不开始/完成动画师,我只是更新fractionComplete
in drawerChangedDistanceFromBottom
,也许我应该?虽然我不希望动画以 5 秒的持续时间实际运行,但我只想要一个可擦洗的动画。
swift - Swift 动态动画,后跟属性动画师
我有一个动画,我使用推送动画,然后使用快照动画UIDynamicBehavior
,然后我以属性行为结束:
基本上上面的代码做了以下事情:
- 添加推送行为
- 移除推送行为
- 添加捕捉行为
- 删除所有行为
- 添加属性转换
我想要的是执行推送操作,然后在大约一秒钟后执行快照行为,并在快照执行完成后执行转换。但是,如果我removeAllBehaviors()
在执行属性转换之前,则快照行为不会完成。但是,如果我离开快照行为并尝试执行属性转换,则它没有任何效果,因为快照行为似乎无限期地作用于对象,使其与属性转换不一致。
我如何以编程方式说完成快照行为然后执行转换?