Как перетащить изображение на значок удаления, чтобы удалить изображение? - PullRequest
0 голосов
/ 09 мая 2018

Эй, ребята, я только что создал примерное изображение, которое можно перетаскивать в представление.

Мой вопрос: как удалить изображение, когда оно перетаскивается и помещается в значок удаления?

Может кто-нибудь помочь с быстрым кодом

Прилагаю пример кода программы ниже:

import UIKit

class ViewController: UIViewController, UIGestureRecognizerDelegate  {

    var Lastscale : CGFloat = 1.0

    @IBOutlet weak var imgView: UIImageView!
    @IBOutlet weak var deleteIcon: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()

        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handlePan(recognizer:)))

        panGestureRecognizer.delegate = self
        imgView.addGestureRecognizer(panGestureRecognizer)
        imgView.isUserInteractionEnabled = true

    }

    @objc func handlePan(recognizer: UIPanGestureRecognizer) {

        let gview = recognizer.view

        if recognizer.state == .began || recognizer.state == .changed {

            let translation = recognizer.translation(in: gview?.superview)

            gview?.center = CGPoint(x: (gview?.center.x)! + translation.x, y: (gview?.center.y)! + translation.y)

            recognizer.setTranslation(CGPoint.zero, in: gview?.superview)

        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

StoryBoard

1 Ответ

0 голосов
/ 09 мая 2018

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

@objc func handlePan(recognizer: UIPanGestureRecognizer) {
    let gview = recognizer.view
    let translation = recognizer.translation(in: gview?.superview)

    switch recognizer.state {
    case .began, .changed:
        imgView.layer.transform = CATransform3DMakeTranslation(translation.x, translation.y, 0)
        // OR
        // imgView.transform = CGAffineTransform(translationX: translation.x, y: translation.y)
    case .ended:
        if deleteIcon.frame.intersects(imgView.layer.frame) {
            animateDelete()
        } else {
            moveBack()
        }
    default:
        moveBack()
    }
}

func animateDelete() {
    UIView.animate(withDuration: 0.3, animations: {
        self.imgView.alpha = 0
    }) { _ in
        self.imgView.isHidden = true
    }
}

func moveBack() {
    UIView.animate(withDuration: 0.3) {
        self.imgView.transform = CGAffineTransform.identity
    }
}
...