gpt4 book ai didi

swift - 在 viewController 中的 2 个不同的 ImageView 上使用 2 个不同的 UIPanGestureRecongizer

转载 作者:行者123 更新时间:2023-11-30 10:32:41 27 4
gpt4 key购买 nike

下面的代码初始化了 2 个不同的 ImageView pg 和 tim。我为 UIPanGestureRecognizer 创建了一个单独的变量,用于每个 ImageView ,并使用 UIPanGestureRecongizer 来移动 ImageView 。现在我无法移动 ImageView 。当我点击 pg 时它就消失了。我只是想开发一个功能,让我可以自由移动每个 ImageView 。我的所有代码都是以编程方式编写的,因此您只需复制代码即可。

import UIKit

class ViewController: UIViewController {

var pg = UIImageView()
var pgGesture = UIPanGestureRecognizer()
var pgCon = [NSLayoutConstraint]()

var tim = UIImageView()
var timGesture = UIPanGestureRecognizer()
var timCon = [NSLayoutConstraint]()



override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.



[pg,tim].forEach({
$0.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview($0)
$0.backgroundColor = UIColor.systemPink
$0.isUserInteractionEnabled = true
})


pgGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.pgGestureMethod(_:)))
pg.addGestureRecognizer(pgGesture)


timGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.timGestureMethod(_:)))
tim.addGestureRecognizer(timGesture)









pgCon = [

pg.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :37.5),
pg.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
pg.widthAnchor.constraint(equalToConstant: 75),
pg.heightAnchor.constraint(equalToConstant: 50),
]


NSLayoutConstraint.activate(pgCon)

timCon = [

tim.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :120),
tim.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
tim.widthAnchor.constraint(equalToConstant: 75),
tim.heightAnchor.constraint(equalToConstant: 50),
]


NSLayoutConstraint.activate(timCon)






}

@objc func pgGestureMethod(_ sender: UIPanGestureRecognizer){
NSLayoutConstraint.deactivate(pgCon)
NSLayoutConstraint.deactivate(timCon)
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 timGestureMethod(_ sender: UIPanGestureRecognizer){
NSLayoutConstraint.deactivate(timCon)
NSLayoutConstraint.deactivate(pgCon)
self.view.bringSubviewToFront(tim)
let tranistioon = sender.translation(in: self.view)
tim.center = CGPoint(x: tim.center.x + tranistioon.x, y: tim.center.y + tranistioon.y)
sender.setTranslation(CGPoint.zero,in: self.view)


}
}

最佳答案

尝试将frame赋予两个imageViews,而不是约束,即

override func viewDidLoad() {
super.viewDidLoad()

pg.frame = CGRect(x: 100, y: 100, width: 75, height: 50) //here....
tim.frame = CGRect(x: 200, y: 200, width: 75, height: 50) //here....

//rest of the code...
}

在上面的代码中,

  1. 根据您的要求更改框架
  2. viewDidLoad() 中删除应用约束的代码。

关于swift - 在 viewController 中的 2 个不同的 ImageView 上使用 2 个不同的 UIPanGestureRecongizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58796200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com