假设我构建了一个控制滑块,我通过UIViewPropertyAnimator
为它设置动画,这样当我从速度拖动时释放动量。
是否可以从该滑块的动画中驱动非可视属性?我正在为每个框架寻找某种回调,或者允许我使用动画并从中控制参数的东西。
或者可以自己创建一个可动画的对象并通过相同的动画驱动它?
例如,考虑一个控制灯泡亮度的滑块,它通过网络协议控制。一旦我释放滑块并开始制作动画,我需要以某种方式确定滑块位置,计算相关的亮度级别并将其转换为灯泡的亮度命令。
我环顾四周,但没有找到这样做的策略。任何提示都将受到高度赞赏。
感谢您的支持!! -mj
我不确定你是否可以动画一个像动画块内部那样的变化,但你绝对可以使用UIGestureRecognizer来做。该类具有委托方法,可以非常频繁地通知您拖动手势的位置,您可以使用这些回调来计算手势在您尝试构建的滑块上移动的“百分比”,并使用该值来设置灯泡的亮度。
要模拟您想要的动量,您必须使用UIPanGestureRecognizer中的velocity(in: )
函数,然后使用该值来模拟您希望速度如何衰减。
根据你想要滑块减速的准确度,你可以使用像TimeToStop = InitialVelocity/DecelerationRate
这样的物理方程式,其中减速率是一个常数,你可以保持恒定并一直玩,直到你有一个你喜欢的值。通过计算出这些值,您可以获得很多选项来生成您正在寻找的回调。我建议在你想要的回调之间选择一个常数,以便你可以根据目的定制它们(即你不想每秒进行10次网络调用)。然后,使用该常量来计算要触发回调的次数,然后使用异步延迟或计时器来使用滑块值触发回调,该值将为SlideOffset = OffsetWhenGestureEnded + VelocityWhenGestureEnded*TimeToStop + 0.5*DecelerationRate*TimeToStop^2