如何解决如何使用我的 UITapGestureRecognizer 启用捏合手势?
我有一个功能可以将上传的照片渲染到屏幕上,用户可以捏住它来调整大小和平移。我的问题是当加载第二张图像时,我无法再捏合来调整初始图像的大小,但它仍然可以平移。
我尝试在 handleTap 函数中再次向发送者添加捏合手势,但没有成功。我在视图上保持捏合手势而不是 UIImageView,以便用户可以捏合屏幕上的任何位置以调整图像大小。
如何使用 tapGestureRecogniser 在当前启用捏合手势的图像之间切换?
//MARK: - Render Art Methods:
@objc func addPainting(_ notification: Notification) {
if ArtBrain.artBrain.artArray.count > 0 {
var artNo = 0
ArtBrain.artBrain.artArray.count == 1 ? (artNo = 0) : (artNo = ArtBrain.artBrain.artArray.count - 1)
pickedImageView = UIImageView(image: ArtBrain.artBrain.artArray[artNo].pickedImage)
pickedImageView.isUserInteractionEnabled = true
pickedImageView.isOpaque = true
pickedImageView.contentMode = .scaleAspectFit
pickedImageView.frame = CGRect(x: 0,y: 0,width: ArtBrain.artBrain.artArray[artNo].width ?? 100,height: ArtBrain.artBrain.artArray[artNo].height ?? 80)
pickedImageView.center = CGPoint(x: userPickedRoom.center.x,y: userPickedRoom.center.y - 50)
view.addSubview(pickedImageView)
let panGesture = UIPanGestureRecognizer(target: self,action: #selector(handlePan))
pickedImageView.addGestureRecognizer(panGesture)
let pinchGesture = UIPinchGestureRecognizer(target: self,action: #selector(handlePinch(_:)))
view.addGestureRecognizer(pinchGesture)
pinchGesture.delegate = self
let tapGesture = UITapGestureRecognizer(target: self,action: #selector(handleTap))
pickedImageView.addGestureRecognizer(tapGesture)
addShadow()
}
}
@objc func handlePan(_ sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: view)
guard let gestureView = sender.view else {return}
gestureView.center = CGPoint(x: gestureView.center.x + translation.x,y: gestureView.center.y + translation.y)
sender.setTranslation(.zero,in: view)
}
@objc func handlePinch(_ sender: UIPinchGestureRecognizer) {
guard sender.view != nil else { return }
if sender.state == .began || sender.state == .changed {
pickedImageView.transform = (pickedImageView.transform.scaledBy(x: sender.scale,y: sender.scale))
sender.scale = 1.0
}
}
@objc func handleTap(_ sender: UITapGestureRecognizer) {
print(sender)
}
解决方法
我解决了这个问题,并想发布我的解决方案,以防其他人需要它。不确定这是否是最好的解决方案,所以如果有人有更好的解决方案,请分享。
我的问题是我无法访问每个图像,因此解决方案是:创建图像以将它们存储在数组中。我还需要添加一个标签,以便在 handleTap 函数中进行比较。我会为任何感兴趣的人发布工作代码。
var selectedArt = 0
var artArray = [UIImageView]()
@objc func addPainting(_ notification: Notification) {
if ArtBrain.artBrain.artArray.count > 0 {
var artNo = 0
ArtBrain.artBrain.artArray.count == 1 ? (artNo = 0) : (artNo = ArtBrain.artBrain.artArray.count - 1)
pickedImageView = UIImageView(image: ArtBrain.artBrain.artArray[artNo].pickedImage)
pickedImageView.tag = artNo
selectedArt = artNo
pickedImageView.isUserInteractionEnabled = true
pickedImageView.isOpaque = true
pickedImageView.contentMode = .scaleAspectFit
pickedImageView.frame = CGRect(x: 0,y: 0,width: ArtBrain.artBrain.artArray[artNo].width ?? 100,height: ArtBrain.artBrain.artArray[artNo].height ?? 80)
pickedImageView.center = CGPoint(x: userPickedRoom.center.x,y: userPickedRoom.center.y - 50)
view.addSubview(pickedImageView)
let panGesture = UIPanGestureRecognizer(target: self,action: #selector(handlePan))
pickedImageView.addGestureRecognizer(panGesture)
let pinchGesture = UIPinchGestureRecognizer(target: self,action: #selector(handlePinch(_:)))
view.addGestureRecognizer(pinchGesture)
let tapGesture = UITapGestureRecognizer(target: self,action: #selector(handleTap))
pickedImageView.addGestureRecognizer(tapGesture)
artArray.append(pickedImageView)
addShadow()
}
}
@objc func handlePinch(_ sender: UIPinchGestureRecognizer) {
guard sender.view != nil else {return}
if sender.state == .began || sender.state == .changed {
artArray[selectedArt].transform = (artArray[selectedArt].transform.scaledBy(x: sender.scale,y: sender.scale))
sender.scale = 1.0
}
}
@objc func handleTap(_ sender: UITapGestureRecognizer) {
if sender.view != nil {
selectedArt = sender.view!.tag
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。