从/到动画中使用的值动态更改

Posted

技术标签:

【中文标题】从/到动画中使用的值动态更改【英文标题】:Dynamically change from/to values used in animations 【发布时间】:2016-11-07 14:42:30 【问题描述】:

假设我有以下代码:

Rectangle 
  id: rect

  property int minVal : 0
  property int maxVal : 10
  property int duration: 1000

  SequentialAnimation 
    loops: Animation.infinite
    NumberAnimation 
       target: rect; property: "x"
       from: minVal;  to: maxVal
       duration: duration
    
    NumberAnimation 
       target: rect; property: "x"
       from: maxVal;  to: minVal
       duration: duration
    
  

然后,我将这个对象的minValmaxValduration 属性连接到滑块,这样我就可以玩这个效果了。

有没有办法强制动画使用新的 min/maxVal 值?

目前,动画初始化时出现的minVal/maxVal 值似乎被“烘焙”到动画中,无法强制这些值稍后重新计算/重新烘焙

以前,每次需要其中一项更改时,我都能够摆脱整个 QML 画布。但是在这种情况下,它并不是很实用,所以我想知道是否有其他替代方案?

【问题讨论】:

【参考方案1】:

我找不到在这些值中“烘焙”的方法。至少对我来说,这符合我的预期:

Button 
    id: but
    property int count: 0
    property int minX: 0
    property int maxX:  1000

    text: 'start' + x

    onCountChanged: 
        minX += 10
        maxX -= 10
    

    onClicked: ani.start()


SequentialAnimation 
    id: ani
    NumberAnimation 
        target: but
        property: 'x'
        from: but.minX
        to: but.maxX
    
    ScriptAction 
        script:  but.count += 1 
    

我尽可能避免可能会以某种方式嵌入的绑定。 我错过了你的问题吗?

【讨论】:

@BaCaRoZzo:谢谢! 不客气。 :) 通常人们会因为被编辑而生气,我很高兴事实并非如此。 事实证明,在我之前遇到的问题系统中发生了几件事:1)受这个答案的启发,我在每个属性中添加了“on[Var]Changed”处理程序动画取决于,它会做 anim.restart(); 2)有一些错别字在找不到相关对象时默默地出错; 3)我不得不按照设置刷新的顺序来玩(例如,持续时间属性必须排在最后!) 哦,出于某种奇怪的原因,“maxVal”刷新必须在“minVal”之前发生,否则不会应用“maxVal” - 因为 maxVal 是唯一真正改变/重要的事情,让它发挥作用很重要。

以上是关于从/到动画中使用的值动态更改的主要内容,如果未能解决你的问题,请参考以下文章

如何用动画改变 NumberPicker 的值?

在 SwiftUI 中动态更改动画的持续时间

如何根据从外部传递的更改值动态更改自定义小部件中成员的值

如何为 QPushButton 的背景颜色设置动画(动态更改按钮颜色)

动态更改 colors.xml 的值以更改 android 应用程序的外观

在父组件的值更改时更新子组件中的值