Как я могу использовать CGAffineTransform для правильного перетаскивания - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу сделать перетаскивание для UITextView через UIPanGestureRecognizer с автоматическим выравниванием по центру экрана.Для первого перетаскивания это работает хорошо, но если я пытаюсь сделать это снова, мое перетаскивание начинается с точки инициализации UITextView.Я не знаю, как это исправить.

Первый перетаскивание

enter image description here

Второй перетаскивание

enter image description here

@objc func handlePan(gesture: UIPanGestureRecognizer) {
    let translation = gesture.translation(in: nil)

    switch gesture.state {
    case .changed:
        dragingText.transform = CGAffineTransform(translationX: translation.x, y: translation.y)

    case .ended:

        UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

            self.dragingText.transform = CGAffineTransform(translationX: 0, y: translation.y)

        }, completion: nil)
    default:
        ()
    }
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

решена проблема

 @objc func handlePan(gesture: UIPanGestureRecognizer) {
    let translation = gesture.translation(in: nil)

    switch gesture.state {
    case .changed:

        dragingText.center = CGPoint(x: dragingText.center.x + translation.x, y: dragingText.center.y + translation.y )
        gesture.setTranslation(CGPoint.zero, in: nil)

    case .ended:

        let isInside = isInsideDragableAres()

        if isInside.0 {
            UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.7, options: .curveEaseOut, animations: {
                self.dragingText.center = CGPoint(x: self.view.center.x, y: self.dragingText.center.y + translation.y )
            }, completion: nil)
        }
        else{
            UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.7, options: .curveEaseOut, animations: {
                self.dragingText.center = CGPoint(x: self.view.center.x, y: isInside.1! )
            }, completion: nil)
        }

    default:
        ()
    }
}
0 голосов
/ 08 февраля 2019

CGAffine Transform не требуется для вашей задачи.Попробуйте:

case .changed: textview.center = CGPoint (x: textview.x + translation.x, y: textview.y + translation.y)

...