是否可以从动画控件中驱动非视觉属性?

问题描述 投票:-1回答:1

假设我构建了一个控制滑块,我通过UIViewPropertyAnimator为它设置动画,这样当我从速度拖动时释放动量。

是否可以从该滑块的动画中驱动非可视属性?我正在为每个框架寻找某种回调,或者允许我使用动画并从中控制参数的东西。

或者可以自己创建一个可动画的对象并通过相同的动画驱动它?

例如,考虑一个控制灯泡亮度的滑块,它通过网络协议控制。一旦我释放滑块并开始制作动画,我需要以某种方式确定滑块位置,计算相关的亮度级别并将其转换为灯泡的亮度命令。

我环顾四周,但没有找到这样做的策略。任何提示都将受到高度赞赏。

感谢您的支持!! -mj

swift core-animation
1个回答
0
投票

我不确定你是否可以动画一个像动画块内部那样的变化,但你绝对可以使用UIGestureRecognizer来做。该类具有委托方法,可以非常频繁地通知您拖动手势的位置,您可以使用这些回调来计算手势在您尝试构建的滑块上移动的“百分比”,并使用该值来设置灯泡的亮度。

要模拟您想要的动量,您必须使用UIPanGestureRecognizer中的velocity(in: )函数,然后使用该值来模拟您希望速度如何衰减。

根据你想要滑块减速的准确度,你可以使用像TimeToStop = InitialVelocity/DecelerationRate这样的物理方程式,其中减速率是一个常数,你可以保持恒定并一直玩,直到你有一个你喜欢的值。通过计算出这些值,您可以获得很多选项来生成您正在寻找的回调。我建议在你想要的回调之间选择一个常数,以便你可以根据目的定制它们(即你不想每秒进行10次网络调用)。然后,使用该常量来计算要触发回调的次数,然后使用异步延迟或计时器来使用滑块值触发回调,该值将为SlideOffset = OffsetWhenGestureEnded + VelocityWhenGestureEnded*TimeToStop + 0.5*DecelerationRate*TimeToStop^2

© www.soinside.com 2019 - 2024. All rights reserved.