Просмотр привязки при перетаскивании с помощью распознавателя жестов - PullRequest
0 голосов
/ 02 января 2019

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

1) Создать виртуальный канал с ImageView

2) Ограничить его до 20 со всех сторон (я использую контроллер табуляции, чтобы 20 пикселей от верхней части контроллера были бы еще лучше)

3) Установите его в Aspect Fit

4)Создать розетку для вашего VC

5) Добавить распознаватель жестов в ImageView

let gesture = UIPanGestureRecognizer(target: self, action: #selector(imageDragged(gestureRecognizer:)))
matchImageView.addGestureRecognizer(gesture)

6) Создать функцию imageDragged

@objc func imageDragged(gestureRecognizer: UIPanGestureRecognizer){

    //Current Point where the label is dragged
    let draggedLabelPoint = gestureRecognizer.translation(in: view)
    //Updating the center of the label : viewcenter +/- currentpoint
    matchImageView.center = CGPoint(x: view.bounds.width/2 + draggedLabelPoint.x, y: view.bounds.height/2 + draggedLabelPoint.y)

    let xFromCenter = view.bounds.width/2 - matchImageView.center.x
    var rotation = CGAffineTransform(rotationAngle: xFromCenter / -500)
    let scale = min(100/abs(xFromCenter),1)
    var scaledAndRotated = rotation.scaledBy(x: scale, y: scale)

    //Transforming the Item respective to the distance from center
    matchImageView.transform = scaledAndRotated

    if gestureRecognizer.state == .ended {
        //If Image is out of bounds -> left
        if matchImageView.center.x < (view.bounds.width/2 - 120) {
            matchImageView.alpha = 0
        }
        //If Image is out of bounds -> right
        if matchImageView.center.x > (view.bounds.width/2 + 120) {
            matchImageView.alpha = 0
        }


        //Reset the scaling variables and recentering the Item after swipe
        rotation = CGAffineTransform(rotationAngle: 0)
        scaledAndRotated = rotation.scaledBy(x: 1, y: 1)
        matchImageView.transform = scaledAndRotated
        matchImageView.center = CGPoint(x: view.bounds.width/2, y: view.bounds.height/2)

7) Протестировать эту функцию с другой сторонысоотношение изображений

Когда я нажимаю на изображение и перетаскиваю его чуть-чуть, чтобы распознаватель жестов распознал движение, просмотр изображения выскакивает на несколько пикселей.Я думаю, что интенсивность этого привязки также зависит от пропорции исходного изображения.

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

Я пытался создать переменную смещения, чтобы сгладить ее, но невозможно сузить этот размер на глаз.

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