swift - 如何使用我的 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
}
}
推荐阅读
- c++ - C++ 每天重置雨量计数器
- c# - 从派生类获取基类受保护的属性
- android - React Native 构建失败无法 HEAD /android-jsc/maven-metadata.xml'
- authentication - 如何在 Jmeter 中获取用于登录的 csrf 令牌
- flutter - 如果我不能 100% 确定 Flutter 应用程序的安全性,我应该发布它吗?
- python - UTC 日期时间问题 - 如何适合冒号 - 时间数据“2021-03-11 09:30:01-05:00”与格式“%Y%m%d %H:%M:%S %z”不匹配'
- typescript - 是否可以根据泛型类型定义泛型函数?
- python - 如何使用 Kivy 正确读取图像像素?
- r - Texreg 表不完整
- arrays - 如何使用 REST API 删除多条记录