如何在Swift中实现拖拽图片至删除图标完成删除功能?
实现拖拽图片到删除按钮的功能
没问题!我帮你搞定这个拖拽删除的功能~ 只需要在你现有的拖拽手势逻辑里,加上拖拽结束时判断图片是否碰到删除按钮的代码就可以了,看下面的修改:
修改后的完整代码
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(handlePan(recognizer:))) panGestureRecognizer.delegate = self imgView.addGestureRecognizer(panGestureRecognizer) imgView.isUserInteractionEnabled = true } @objc func handlePan(recognizer: UIPanGestureRecognizer) { // 安全获取拖拽的视图,避免强制解包崩溃 guard let dragView = recognizer.view else { return } if recognizer.state == .began || recognizer.state == .changed { let translation = recognizer.translation(in: dragView.superview) dragView.center = CGPoint(x: dragView.center.x + translation.x, y: dragView.center.y + translation.y) recognizer.setTranslation(CGPoint.zero, in: dragView.superview) } else if recognizer.state == .ended { // 拖拽结束时,检查图片是否与删除按钮重叠 let imgFrame = dragView.frame let deleteBtnFrame = deleteIcon.frame // 判断两个视图的frame是否有交集 if imgFrame.intersects(deleteBtnFrame) { // 方式1:直接从父视图移除图片(彻底删除) dragView.removeFromSuperview() // 方式2:隐藏图片(后续可复用) // imgView.isHidden = true } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // 释放可重建的资源 } }
关键细节说明
- 安全的可选处理:把原来的强制解包改成
guard let,避免手势视图为nil时崩溃,代码更健壮。 - 拖拽结束的判断时机:选择在手势状态为
.ended时处理删除逻辑,因为此时用户已经完成拖拽动作,确认要把图片放到删除区域。 - 重叠判断逻辑:用
frame.intersects(_:)方法快速判断两个视图是否有重叠区域,如果你想要更严格的判断(比如图片大部分进入删除按钮区域才删除),可以计算重叠区域的面积占比,比如:let intersectionRect = imgFrame.intersection(deleteBtnFrame) let intersectionArea = intersectionRect.width * intersectionRect.height let imgArea = imgFrame.width * imgFrame.height // 当重叠面积超过图片面积的50%时才删除 if intersectionArea > imgArea * 0.5 { dragView.removeFromSuperview() } - 命名规范修正:把你原来的
Lastscale改成了lastScale,符合Swift的小驼峰命名习惯,代码可读性更好。
StoryBoard布局说明
你的StoryBoard布局中,应该包含了一个启用用户交互的UIImageView(即你要拖拽的图片),以及一个用作删除标识的UIButton(比如垃圾桶样式的图标),按钮一般放置在屏幕的固定位置(如底部或右侧边缘),方便用户拖拽图片到该区域完成删除操作。
内容的提问来源于stack exchange,提问作者BizDev
相关产品推荐
相关产品推荐

