【问题标题】:How to drag and drop an image on delete icon to delete the image?如何将图像拖放到删除图标上以删除图像?
【发布时间】:2018-05-09 07:03:42
【问题描述】:

大家好,我刚刚创建了一个可以在视图中拖动的示例图像视图。

我的问题是如何将图片拖到删除图标中时删除?

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

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

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


}

【问题讨论】:

  • 您需要检查图像边界是否在您的删除图标附近。在状态 == .changed 中执行此操作。一旦图像位于所需区域,您可以手动结束平移手势并继续删除图像

标签: ios swift drag-and-drop


【解决方案1】:

首先,使用 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
    }
}

【讨论】:

  • 检查我的最新编辑。此行:imgView.layer.transform = CATransform3DMakeTranslation(translation.x, translation.y, 0)
  • 我很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多