- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基本的 UIView
,其中嵌套了另一个 UIView
。想象一个盒子,里面有一个更小的盒子。它甚至可以是一个 UIImageView
内部。只是某种观点。这两个 View 中的每一个都需要有一个 UITapGestureRecognizer
。当我点击内部 View 之外的外部 View 中的任意位置时,我会执行一个操作。当我点击内部 View 时,我想执行不同的操作。
示例:我有一个外部容器 View 和一个内部 UIImageView
。如果我点击内部 View 之外的外部 View ,那么我会转到下一个屏幕。如果我点击内部 ImageView ,它会在弹出窗口中将图像显示为放大版本。
我很难确定优先级。我知道内部 View 所在的 UITapGestureRecognizers
有重叠,但我想指定内部 View 识别器始终优先于外部 View 。
Apple 在 https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/coordinating_multiple_gesture_recognizers/preferring_one_gesture_over_another 的文档中指定了如何区分不同类型的手势识别器。但这并没有显示对同一个委托(delegate)使用相同的两个手势识别器。这是如何实现的?也许我没有正确理解文档。
我将手势识别器附加到代码中的 View ,当我将手势识别器添加到不同的 View 时,我尝试交换,在内部 View 识别器之前添加外部 View 识别器,然后相反。然而,它仍然每次只注册外 View 点击手势识别器。
下面是一些代码。我在界面生成器中创建了 View ,并将其导出到特定 View 中。 campaignContentView
是父 View ,pictureImageView
和 linkDetailsView
是 subview 。有时我只是展示一张应该做一件事的图片。其他时候,我有一个带有相关缩略图的链接,点击其中一个应该会做另一件事。
@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)
。事实证明,linkDetailsView
的手势识别器实际上工作正常,只是 pictureImageView
最佳答案
这并没有回答如何指定优先级,但我可以解决你的问题。我认为您不需要使用手势优先级,除非一个 View 附加了两个手势。在您的情况下,您有两个具有自己手势的 View 。
我认为你真正的问题是你的内在观点不在你的外在观点之上。我建议查看 View 层次结构调试器。我在一个 View 中创建了一个 View ,并且能够确定他们自己的点击手势。
我在 Playground 上用点击手势创建了一个简单的两个盒子...
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let innerView = UIView()
innerView.backgroundColor = UIColor.red
view.addSubview(innerView)
innerView.translatesAutoresizingMaskIntoConstraints = false
innerView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
innerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
innerView.widthAnchor.constraint(equalToConstant: 100).isActive = true
innerView.heightAnchor.constraint(equalToConstant: 100).isActive = true
self.view = view
let outTapGesture = UITapGestureRecognizer(target: self, action: #selector(outterViewTapped))
let innerTapGesture = UITapGestureRecognizer(target: self, action: #selector(innerViewTapped))
view.addGestureRecognizer(outTapGesture)
innerView.addGestureRecognizer(innerTapGesture)
}
@objc func outterViewTapped() {
print("Outter tapped!")
}
@objc func innerViewTapped() {
print("Inner tapped!")
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
关于ios - 如何指定同类型的 UIGestureRecognizer 的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54228699/
我知道触摸事件可以传递给点击 View 或手势。但在我的演示中有些让我感到困惑: 我的 Root View 中有两个 subview ,一个是 testView(UIView 的子类),另一个是 te
我有一个带有一些手势识别器(ala Clear)的 View 。我应该只为语音用户添加按钮吗? 我考虑过使用提示来表达类似“3 指向右滑动以编辑。向左滑动以删除。向上滑动以创建新的”之类的内容。但似乎
我有两个问题: 我能否实现继承自 UISwipeGestureRecognizer 的手势识别器并将逻辑添加到 UIEvent 处理程序? 我可以在不将它附加到 UIView 的情况下实现 UIGes
我正在开发 iPhone 应用程序,但遇到了手势识别器的问题。 我在一个 View 上添加了一个 UITapGestureRecognizer,然后我用 CABasicAnimation 转换与这个
我有很多类,想要将 UIGestureRecognizer 添加到它们的 UIImageViews 中。 我正确地将一个添加到所有类中。问题是我重复了代码,以便每个类都添加相同的识别器。这些是本地识别
我想在我的 UIPinchGestureRecognizer 完成捏合手势时收到回调。此外,如果知道完成的手势是放大还是缩小,那就太好了。 有人知道使用方法吗?或者采取什么方法? 谢谢! 最佳答案 另
我已经在 View Controller 的 viewDidLoad 上设置了 UITapGestureRecognizer,但不知何故,它会为单次点击触发两次选择器方法。 UITapGestureR
我正在使用 UIPanGestureRecognizer在几个类似卡片的 View 上,让用户在屏幕上移动 View 。他们可以同时放下 3 个手指并拾取 3 张卡片,这非常好,但是,我的某些功能并不
这里给出一个例子,(使用 ARC ) UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init
当我使用 UIGestureRecognizer ,例如,当用户向右滑动时,我想要一个 UIAlertView询问他是否真的要进行向右滑动的 Action 。 我曾尝试这样做,但没有成功。 最佳答案
我有一个子类 UIView ,我们称之为TileView.m/h . 在 TileView.m ,我有以下代码:( [setup] 肯定被调用,我用断点检查过)。 - (void)setup {
我有一个 UIGestureRecognizer附加到 UILabel当稍后进入视野时,它会在屏幕外渲染。进入视野后,点击手势识别器不起作用。如果在 View 中渲染,它工作正常。 任何想法为什么这不
我已经使用 UIPanGestureRecognizer 实现了一些交互式 UIViewController 演示动画,例如平移以呈现 View Controller 。 我现在要做的是允许这种行为通
在我的 tvOS 应用程序中,我有一个 Collection View ,其中包含代表电影的单元格。 我在 View 上附加了 2 个手势识别器: 点击选择即可查看电影详细信息 直接播放影片(使用 A
UIGestureRecognizer 导致未捕获的异常错误。它说无法识别的选择器发送到实例。我正在使用 Swift 3 和 Xcode 8。 这是代码。 import UIKit import UI
我正在制作一个在图像上包含几个图层的应用程序。该效果层是 UIView - EffectsLayerView 的子级。里面有Effect1View、Effect2View和Effect3View,其中
我有两个类,它们都添加了 UIPinchGestureRecognizer 并使用选择器来处理响应手势的代码。注意:手势识别器委托(delegate)可能与此问题无关,但我将其包含在代码中,以防万一。
我正在尝试学习 Swift,这让我很困惑: 假设您要添加手势: faceView.addGestureRecognizer(UIPinchGestureRecognizer(targe
我刚开始使用适用于 iOS 的 Google Maps SDK,但遇到了一些问题。我正在尝试添加以下代码: - (void)viewDidLoad { [super viewDidLoad];
我正在学习 iOS 开发并且正在查看 UIGestureRecognizer 的。 我有一个观点。当您点击该 View 时,我想显示一个 UIPopoverController 并且我还希望它像 UI
我是一名优秀的程序员,十分优秀!