Получите доступ к скорости жеста панорамирования

Я хочу получить скорость жеста панорамирования, и я подумал использовать свойство скорости отправителя, но, похоже, это не работает:

@IBAction func handleGesture(sender: AnyObject) {
    let v = sender.velocity
}

но выдает ошибку:

"ambiguous use of 'velocity'"

Если это не способ получить доступ к скорости жеста панорамирования, то что?


person Eilon    schedule 05.11.2014    source источник


Ответы (2)


UIPanGestureRecognizer не имеет свойства с именем velocity. Вы должны использовать метод velocityInView.

func userPanned(sender: UIPanGestureRecognizer) {
    let v = sender.velocityInView(self.view)
}
person sunkehappy    schedule 05.11.2014
comment
хорошо, метод velocityInView возвращает CGPoint, который мне не нужен, мне нужно взять скорость и сравнить ее с числом - person Eilon; 05.11.2014
comment
CGpoint имеет значение X/Y CGFloat, которое вы можете сравнить. По обеим осям есть скорость, поэтому вам нужно указать, какую из них вы хотите - person Oren; 12.02.2015

Для скорости вам нужно сделать следующее

sender.velocityInView(self.view) дает вам пиксели. Чтобы получить скорость, вам нужно разделить ее на 60 следующим образом:

sender.velocityInView(self.view).x / 60 // For horizontal

sender.velocityInView(self.view).y / 60 // For vertical

Следовательно, вы можете обновить позицию, просто добавив к ней исходное значение следующим образом:

var initialLocation: CGPoint? // Global

initialLocation.x = (initialLocation ?? 0)

(initialLocation.x)! = (initialLocation.x)! + (sender.velocity(in: colorSlider!).x / 60) // For horizontal

(initialLocation.y)! = (initialLocation.y)! + (sender.velocity(in: colorSlider!).y / 60) // For vertical
person ajay senthu    schedule 07.03.2019
comment
почему 60? 1 пиксель равен 1, 0,33 или 0,5 пункта в зависимости от используемого экрана. Откуда 60? - person Dmitrij Rogov; 29.05.2021