ios - 如何将图像拖放到删除图标上以删除图像?
问题描述
嘿伙计们,我刚刚创建了一个可以在视图内拖动的示例图像视图。
我的问题是如何在图像被拖动并放置在删除图标中时删除它?
任何人都可以帮助快速代码
特此附上我的示例程序代码如下:
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.
}
}
解决方案
首先,使用 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
}
}
推荐阅读
- python - 用户登录后调用 displayMenu() 函数
- c# - 将 C# WebApp 从 Azure AppService 连接到在另一个 Azure VM 中运行的应用程序
- java - 单击 RecyclerView 中的项目时如何获取详细信息?
- awk - 将 awk 操作应用于特定列
- docker - 这个 docker 命令中的“docker-compose up -d” “-d” 有什么作用
- python - 依靠 pandas 的滚动时间窗口
- github - github问题反馈,如微软文档
- python - print() 的无效关键字参数
- python - 使用 https 的 Python 请求 - 证书验证失败
- angular - 如何使用动态提供程序禁用 Angular 动画?