iOS UIImageView CGAffinetranform перевод с жестом Pan восстанавливает UIImage вид идентичности при попытке перетаскивания снова - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь реализовать функциональность перетаскивания компонента пользовательского интерфейса, используя UIPanGesture в iOS. Ниже приведен код селектора при срабатывании жеста панорамирования. Ниже приведено поведение панорамирования в формате gif.

leftThumbImageView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(leftDragged(i:))))
@objc private func leftDragged(i: UIPanGestureRecognizer){
    let p = i.translation(in: self)
    if p.x == 0 { return }
    if p.x < 0 { //dragger toward left
        if leftThumbImageView!.frame.midX > 0 { //dragged component not go out bounds
            let t = CGAffineTransform.init(translationX: p.x, y: 0)
            leftThumbImageView?.transform = t
        } else {
            leftThumbImageView?.transform = CGAffineTransform.identity
        }
    } else { //dragged right, [if] dragged right do not cross right side image view

        if leftThumbImageView!.frame.maxX < rightThumbImageView!.frame.minX {
            let t = CGAffineTransform.init(translationX: p.x, y: 0)
            leftThumbImageView?.transform = t
        }
    }
}

enter image description here

1 Ответ

0 голосов
/ 04 мая 2020

Вы не устанавливаете перевод прямо на rightThumbImageView. Попробуйте приведенный ниже код, он должен работать.

@objc private func leftDragged(gesture: UIPanGestureRecognizer){
            let translation = gesture.translation(in: blackView)
            if translation.x == 0 { return }

            if translation.x < 0 {
                gesture.view?.center = CGPoint(x: max(0, (leftThumbImageView.view?.center.x)! + translation.x), y: (leftThumbImageView.view?.center.y)!)
            } else {
                gesture.view?.center = CGPoint(x: min((leftThumbImageView.view?.center.x)! + translation.x, rightThumbImageView.frame.minX), y: (leftThumbImageView.view?.center.y)!)
            }
             gesture.setTranslation(CGPoint.zero, in: self.view)
        }

ПРИМЕЧАНИЕ. Не распаковывайте вещи, так как это не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...