Я не уверен, что вы могли бы анимировать подобное изменение внутри блока анимации, но вы определенно могли бы сделать это с помощью UIGestureRecognizer. В этом классе есть методы делегата, которые могут довольно часто информировать вас о положении жеста перетаскивания, и вы можете использовать эти обратные вызовы для вычисления «процента» перемещения жеста по ползунку, который вы пытаетесь построить, и использовать это значение для установки значения. яркость лампочки.
Чтобы смоделировать нужный вам импульс, вам нужно будет использовать функцию velocity(in: )
из UIPanGestureRecognizer, а затем использовать это значение, чтобы смоделировать, как вы хотите, чтобы скорость уменьшилась.
В зависимости от того, насколько точным вы хотите, чтобы было замедление вашего ползунка, вы можете использовать некоторые физические уравнения, такие как TimeToStop = InitialVelocity/DecelerationRate
, где скорость замедления является константой, которую вы сохраняете как константу и с которой будете играть, пока не получите значение, которое тебе нравится. С этими значениями у вас есть много вариантов того, как генерировать обратные вызовы, которые вы ищете. Я бы предложил выбрать постоянную на сколько секунд между обратными вызовами вы хотите, чтобы вы могли адаптировать их к цели (то есть вы не хотите делать 10 сетевых вызовов в секунду). Затем используйте эту константу, чтобы выяснить, сколько раз вы хотите запустить обратный вызов, а затем используйте асинхронную задержку или таймер для запуска обратного вызова со значением ползунка, которое будет SlideOffset = OffsetWhenGestureEnded + VelocityWhenGestureEnded*TimeToStop + 0.5*DecelerationRate*TimeToStop^2