UIGestureRecognizer 在屏幕外渲染

Posted

技术标签:

【中文标题】UIGestureRecognizer 在屏幕外渲染【英文标题】:UIGestureRecognizer rendered off screen 【发布时间】:2012-08-13 20:27:00 【问题描述】:

我有一个UIGestureRecognizer,它附加到一个UILabel,它在屏幕外渲染,稍后进入视图。进入视野后,点击手势识别器不起作用。如果在视图中渲染,它可以正常工作。

任何想法为什么这不起作用?我该如何解决?

【问题讨论】:

你有没有试过在标签进入视图后添加识别器? 标签被带入视图后是否有其他(透明)视图覆盖/重叠标签? 我通过继承 UILabel 并实现 hitTest:withEvent: 解决了这个问题 【参考方案1】:

我严重怀疑它是否与将其“渲染”到屏幕外有关(你的意思是什么)。无论如何,我建议当标签被带到屏幕上时,您验证标签是否已启用,然后执行以下操作:

NSArray *grs = label.gestureRecognizers; 
for(UIGestureRecognizer *gr in grs) 
  NSLog(@"Recognizer: %@ enabled=%d state=%d del=%@", NSStringFromClass[gr class]), gr.enabled, gr.state, gr.delegate);

比较屏幕外和屏幕上的结果会很有趣。事情正在发生,只需要找出不同的属性。但是没有办法获得目标/动作对的列表。

【讨论】:

【参考方案2】:

子类化UILabel 并实现hitTest:withEvent: 解决了这个问题

【讨论】:

以上是关于UIGestureRecognizer 在屏幕外渲染的主要内容,如果未能解决你的问题,请参考以下文章

UIGestureRecognizer 拖拽 UIView

基于位置的 UIGestureRecognizer

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

在 iOS 中使用 UIScrollView 添加 UIGestureRecognizer

添加优先于所有其他交互的 UIGestureRecognizer

检测 UIGestureRecognizer 点击并释放以显示和删除 UIView