我有一个基本的
UIView
与另一
UIVIEW
嵌套在里面。想象一个盒子里面有一个小盒子。甚至可能是
UIImageView
里面。只是某种类型的视图。这两个视图中的每一个都需要
UITapGestureRecognizer
.当我在内部视图外的任何位置点击时,我执行一个操作。当我点击内部视图时,我想做一个不同的动作。
示例:我有一个外部容器视图和一个内部容器视图
UIIVIEVIEW
. 如果我轻击内部视图之外的外部视图,那么我将进入下一个屏幕。如果我点击内部图像视图,那么它会在弹出窗口中将图像显示为更大的版本。
我很难确定优先顺序。我知道有重叠的
UITapGestureRecognizers
内部视图的位置,但我想指定内部视图识别器始终优先于外部视图。
Apple指定如何区分位于
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/coordinating_multiple_gesture_recognizers/preferring_one_gesture_over_another
但这并不表示使用相同的两个手势识别器和相同的委托。这是如何实现的?也许我没有正确理解这些文件。
我将手势识别器附加到代码中的视图,当我将手势识别器添加到不同的视图、将外部视图识别器添加到内部视图识别器之前以及相反时,我尝试交换。但是,它仍然每次只注册外部视图tap手势识别器。
下面是一些代码。我在Interface Builder中创建了视图,并将其输出到特定视图中。
campaignContentView
是父视图,并且
pictureImageView
和
linkDetailsView
是子视图。有时我只是展示一张应该做一件事的图片。其他时候,我有一个与缩略图相关联的链接,点击其中任何一个都应该做另一件事。
@IBOutlet weak var campaignContentView: UIView!
@IBOutlet weak var pictureImageView: UIImageView!
@IBOutlet weak var linkDetailsView: UIView!
private func addNewGestureRecognizer(_ view: UIView) {
let tapView = UITapGestureRecognizer(target: self, action: #selector(CampaignActionContentView.tappedView(_:)))
campaignContentView.addGestureRecognizer(tapView)
switch view {
case linkDetailsView:
let tapLinkDetails = UITapGestureRecognizer(target: self, action: #selector(CampaignActionContentView.tappedLink(_:)))
let tapLinkPicture = UITapGestureRecognizer(target: self, action: #selector(CampaignActionContentView.tappedLink(_:)))
view.addGestureRecognizer(tapLinkDetails)
pictureImageView.addGestureRecognizer(tapLinkPicture)
case pictureImageView:
let tapPicture = UITapGestureRecognizer(target: self, action: #selector(CampaignActionContentView.tappedPicture(_:)))
view.addGestureRecognizer(tapPicture)
default:
print("No new gesture necessary")
}
}
我也在打电话
bringSubviewToFront(pictureImageView)
和
bringSubviewToFront(linkDetailsView)
因此。事实证明,手势识别器
链接详图
实际上工作正常,只是不是
图片图像视图