swift - 使用标签组合@objc func方法
问题描述
我的代码使用 UIPan gestureRecongnizzer 声明了 2 个不同的 @objc func 方法。我认为有一种方法可以使用标签仅使用 1 个 objc func 方法。当前所做的所有功能都是移动图像视图。我不知道标签是否是最好的方法,我对其他解决方案持开放态度,我只想要 1 个功能。具体看pgGestureMethod和sgGestureMethod。
var pg = UIImageView()
var pgGesture = UIPanGestureRecognizer()
var pgCon = [NSLayoutConstraint]()
var sg = UIImageView()
var sgGesture = UIPanGestureRecognizer()
var sgCon = [NSLayoutConstraint]()
override func viewDidLoad() {
super.viewDidLoad()
[pg,sg].forEach({
$0.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview($0)
$0.isUserInteractionEnabled = true
})
pgGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.pgGestureMethod(_:)))
pg.addGestureRecognizer(pgGesture)
sgGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.sgGestureMethod(_:)))
sg.addGestureRecognizer(sgGesture)
}
@objc func pgGestureMethod(_ sender: UIPanGestureRecognizer){
self.view.bringSubviewToFront(pg)
let tranistioon = sender.translation(in: self.view)
pg.center = CGPoint(x: pg.center.x + tranistioon.x, y: pg.center.y + tranistioon.y)
sender.setTranslation(CGPoint.zero,in: self.view)
}
@objc func sgGestureMethod(_ sender: UIPanGestureRecognizer){
let tranistioon = sender.translation(in: self.view)
sg.center = CGPoint(x: sg.center.x + tranistioon.x, y: sg.center.y + tranistioon.y)
sender.setTranslation(CGPoint.zero,in: self.view)
}
解决方案
欢迎来到 Stackoverflow。
因此,在您的情况下,您可以了解从手势函数中的参数调用了哪个手势。
class SomeViewController: UIViewController {
var pg = UIImageView()
var pgGesture = UIPanGestureRecognizer()
var pgCon = [NSLayoutConstraint]()
var sg = UIImageView()
var sgGesture = UIPanGestureRecognizer()
var sgCon = [NSLayoutConstraint]()
override func viewDidLoad() {
super.viewDidLoad()
[pg,sg].forEach {[unowned self] in
$0.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview($0)
$0.isUserInteractionEnabled = true
}
pgGesture = UIPanGestureRecognizer(target: self, action: #selector(gestureDidRecognize(_:)))
pg.addGestureRecognizer(pgGesture)
sgGesture = UIPanGestureRecognizer(target: self, action: #selector(gestureDidRecognize(_:)))
sg.addGestureRecognizer(sgGesture)
}
}
@objc private extension SomeViewController {
func gestureDidRecognize(_ gesture: UIPanGestureRecognizer){
guard let gestureView = gesture.view else { return }
let transition = gesture.translation(in: view)
switch gesture {
case pgGesture:
view.bringSubviewToFront(pg)
default: break
}
gestureView.center = CGPoint(
x: gestureView.center.x + transition.x,
y: gestureView.center.y + transition.y)
gesture.setTranslation(.zero, in: view)
}
}
推荐阅读
- json - 如何在 Json 响应中显示不同的不同数据形式?
- reactjs - 从 material-ui 按钮 onClick 渲染 JSX
- python-3.x - python无法导入自定义包
- php - 实施 PayU 集成时哈希无效
- firebase - 如何仅将子域重定向到 Firebase
- javascript - 从反应js中的数组数据获取输入标签时如何调用函数?
- python - 为什么 Python 将 (int) 之类的数据类型关键字视为变量?
- amazon-web-services - 我可以从源帐户运行 S3 批量复制操作作业吗
- wordpress - 允许访问者使用令牌在 Wordpress 中查看私人帖子
- java - 任何人都可以深入了解 @PreAuthorize 注释的工作原理吗?