2016-09-11 2 views
1

У меня есть UIView с жестом салфетки.Изменить значение UISlider с помощью жестового удара swift

let swipeUpGesture = UISwipeGestureRecognizer(target: self, action: #selector(NextStepCaptureVC.handleSwipeUp(gesture:))) 
     swipeUpGesture.direction = .up 
     view.addGestureRecognizer(swipeUpGesture) 

func handleSwipeUp(gesture: UISwipeGestureRecognizer) { 
     print("Swipe Up") 
     heightSlider.setValue(20, animated: true) 
    } 

При попытке изменить значение, которое он работает, но скачок значения от 0 до 20. Я хочу, чтобы значение непрерывно изменяться во время считывания. Как мне это сделать?

+0

Почему вы используете представление и меняете ползунок на основе прокрутки зрения? вы можете напрямую изменить слайдер, проверив его! – Lion

+0

Я знаю, что @KetanParmar. –

ответ

4

Судя по вашему коду, похоже, что вы пытаетесь сделать «панорамирование вверх и вниз» на экране переводимым в значение изменения UISlider.

Как уже отмечалось другими, первая вещь, чтобы изменить свою UISwipeGestureRecognizer к UIPanGestureRecognizer

let pan = UIPanGestureRecognizer(target: self, action: #selector(pan(gesture:))) 
view.addGestureRecognizer(pan) 

Затем в функции панорамирования, вам необходимо обновить значение слайдера на основе того, сколько пользователь приготовлена.

func pan(gesture: UIPanGestureRecognizer) { 
    // The amount of movement up/down since last change in slider 
    let yTranslation = gesture.translation(in: gesture.view).y 

    // The slide distance needed to equal one value in the slider 
    let tolerance: CGFloat = 5 

    if abs(yTranslation) >= tolerance { 
     let newValue = heightSlider.value + Float(yTranslation/tolerance) 
     heightSlider.setValue(newValue, animated: true) 

     // Reset the overall translation within the view 
     gesture.setTranslation(.zero, in: gesture.view) 
    } 
} 

Просто настройте переменную tolerance, чтобы пользователь красть больше/меньше для того, чтобы отрегулировать значение ползунка.

+0

Ваш ответ работает, но значение меняется, когда я панорамирую. Как я могу заставить его работать, когда я нажимаю вверх? Спасибо @David –

+0

Мой ответ работает для панорамирования вверх и вниз. Если вы хотите изменить направление движения слайдера ... измените 'let newValue = heightSlider.value + Float (yTranslation/tolerance)' to 'let newValue = heightSlider.value - Float (yTranslation/tolerance)' –

+0

@KerbyJean figuring как изменить направление слайдера не должно было быть слишком сложно для вас выяснить. Я рекомендую вам убедиться, что вы действительно понимаете все о коде, который я предоставил, - попробуйте не копировать и вставлять его :) –

0

Вы не хотите UISwipeGestureRecognizer, вы хотите UIPanGestureRecognizer. Салфетка - это одноразовый жест.

Apple's documentation говорит: «Салфетка представляет собой дискретный жест, и поэтому связанное сообщение о действии отправляется только один раз за жест».

+0

Это так, спасибо. Но как мне изменить значение непрерывно? Я хочу, чтобы ползунок живой живой. –

+0

Используйте 'UIPanGestureRecognizer'. – EricS

+0

Вы используете делегат, чтобы получить штрихи, и вы контролируете их по состоянию начала/конца/хода – Yitzchak

0

Вы создали основное действие от вашего жеста распознаватель в код (Вы можете использовать Interface Builder для этого)

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) { 
    if recognizer.state == UIGestureRecognizerState.Began { 
    } else if recognizer.state == UIGestureRecognizerState.Ended { 
    } else if recognizer.state == UIGestureRecognizerState.Changed { 
    } 
} 

Удачи! =]

Смежные вопросы