首页 > 解决方案 > 如何将图像拖放到删除图标上以删除图像?

问题描述

嘿伙计们,我刚刚创建了一个可以在视图内拖动的示例图像视图。

我的问题是如何在图像被拖动并放置在删除图标中时删除它?

任何人都可以帮助快速代码

特此附上我的示例程序代码如下:

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.
    }


}

故事板

标签: iosswiftdrag-and-drop

解决方案


首先,使用 switch 语句来检查识别器状态更简洁。此外,我认为在这种情况下,您希望在识别器翻译发生变化时设置图层的变换,这样您就可以保留视图的初始帧,并且始终可以通过将变换设置为其标识来动画回动画。然后如果按钮和图像视图层的矩形相交,隐藏图像视图,否则向后移动。像这样:

@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
    }
}

推荐阅读