Tag: 触摸事件

iOS – 如何将触摸转发到底层的uiview

我有3个相同大小的UIViews堆叠在一起。 最顶端是透明的,只用于检测触摸。 检测到的触摸types将决定我想要接收触摸事件的其他两个基础视图中的哪一个。 一旦最上面的视图完成触摸,我需要将触摸事件转发到正确的基础视图。 我怎样才能做到这一点? 编辑 – 我正在添加我的触摸检测代码。 这是在MainViewController中,其视图包含所有3个子视图。 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { if (touch.view == self.touchOverlay) { CGPoint touchLocation = [touch locationInView:touch.view]; //do a bunch of math to determine which view should get the touches. if (viewAshouldGetTouches) //forward to viewA if (viewBshouldGetTouches) //forward to viewB } } […]

如何将触摸事件发送到Swift中的nextResponder

背景 我试图让一个UICollectionViewCell像一个button(即,做一个animation昏暗的触摸)行为。 我有一个用UIButton填充单元的想法。 然后,button将照顾被窃听的视觉效果。 但是,然后我需要将触摸事件传递给父( UICollectionViewCell ),以便button不只是消耗事件。 这样我可以处理它与集合视图的didSelectItemAtPath 。 下面的问题是我试图找出如何通过事件。 我的问题 我遇到了这个Objective-C的答案传递触摸事件: – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; [self.nextResponder touchesBegan:touches withEvent:event]; } 不过,当我试图将其转换为Swift时,我陷入了困境: class MyButton: UIButton { override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { super.touchesBegan(touches, withEvent: event) self.nextResponder() // ??? } } nextResponder方法不接受任何参数,那么如何传递触摸事件呢? 我无法使用相关的SO问题( 这里和这里 )来帮助我解决这个问题。

在SpriteKit中,touchesBegan和SKScene更新方法在同一个线程中运行吗?

在这里的Apple文档中, 高级场景处理描述了update方法以及如何渲染场景,但是没有提及何时处理input。 不清楚它是否与渲染循环处于同一个线程中,或者与渲染循环是否一致。 如果我有一个对象,我从SKScene update方法和touchesBegan方法update (在这种情况下的SKSpriteNode ),我必须担心同步两个访问到我的对象吗?

多点触控touchEvents不会触发,因为它们应该在Safari Mobile上

我在Safari Mobile的一个页面上有各种touchEvents检测(一个控制器,如果你想知道…)。 他们都工作良好,但每当我有一个第一个接触点按下,如果我触及一个新的点,触发一个新的事件触发。 例如 : 我用手指拿着棍子。 它不动 我按了一个button,一个touchStart事件应该被触发,但不是 如果我移动手柄,触发touchStart事件 如果我放开button,则会触发touchStart,但不触摸touchEnd 如果我移动摇杆(touchMove),touchEnd被触发 你明白我的情况是一个问题。 我得到的button触发延迟,或卡住,直到我移动棒等… 有没有解决方法? 谢谢

ios的webkit touchend事件不发射?

我试图实现一个基于IOS的webkit的应用程序的菜单,其中用户触摸/点击并保存菜单button('.menu_item'),在子菜单打开(div.slide_up_sub_menu)500毫秒后,用户应该能够将他们的手指/鼠标滑动到子菜单项目并释放。 <li class="menu_item"> ASSET MANAGEMENT <div class="slide_up_sub_menu hidden_menu"> <ul class="submenu"> <li>Unified Naming Convention</li> <li>Version Control</li> </ul> </div> </li> 然后,应用程序应该能够检测touchend / mouseup事件发生在哪个子菜单项上。 我将一个touchstart事件绑定到菜单项,等待500ms,然后告诉子菜单显示。 当用户松开手指时,触发事件应该触发closures子菜单。 如果用户已经停止了对子菜单项的触摸,则应该检测到它。 目前,在桌面上的Safari中检测哪个子菜单项发生mouseup事件: $('ul.submenu li').live('mouseup', function(e){ console.log($(e.currentTarget)); //works on the desktop }); 但如果我使用touchend处理程序执行相同的操作,则无法在ipad上运行: $('ul.submenu li').live('touchend', function(e){ console.log($(e.currentTarget)); //never fires }); 如果我查找每个touchend事件,当我结束子菜单项的触摸时,可以获得对父子菜单项的引用: $(document.body).bind('touchend', function(e) { console.log($(e.target).html()); //logs ASSET MANAGEMENT }); 但没有提及子菜单项。 有没有人有任何想法,为什么touchend事件不被触发的子菜单项? 谢谢

检查touchend是否在拖动之后

我有一些代码,它改变了表的类。 在手机上,有时桌子太宽了,用户会拖动/滚动查看内容。 但是,当他们触摸并拖动表格时,会触发每次拖动的触发。 我如何testing,看是否触摸拖动的结果? 我尝试跟踪dragstart和dragend,但我无法得到这个工作,这似乎是一个不雅的方法。 有什么我可以添加到下面,基本上确定,“这个touchend到达拖动结束? $("#resultTable").on("touchend","#resultTable td",function(){ $(this).toggleClass('stay'); }); 在此先感谢您的帮助。 PS – 使用最新的jQuery,虽然经常点击的作品,但与touchend相比非常缓慢。

在显示键盘时检测UITextView中属性文本的轻敲

这是对我以前的答案的补充问题检测在UITextView在iOS中的属性文本的轻拍 。 我使用Xcode 7.1.1和iOS 9.1重新testing了下面的代码,并且它与链接到的答案中描述的设置正常工作。 import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { @IBOutlet weak var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() // Create an attributed string let myString = NSMutableAttributedString(string: "Swift attributed text") // Set an attribute on part of the string let myRange = NSRange(location: 0, length: 5) // range of "Swift" let […]

superview的手势应该取消iOS 7中的子视图的手势?

几年以来,我一直在假设,如果一个超级观点和它的子视图都有手势识别器,子视图将首先接收触摸并取消超级观点的手势。 直到iOS 7这个假设从来没有让我失望,让我添加手势子视图相信超级观点的手势不会干涉。 但是在iOS 7中,超级视图会先随机接收触摸并取消子视图的手势。 这种情况很less发生,这使问题很难被发现。 我第一次遇到这个问题,作为无法使用UITapGestureRecognizer窃听的UITapGestureRecognizer …再次,很less。 通常button将工作,直到他们没有。 让你质疑你的理智。 所以我推出了我自己的TapGestureRecognizer ,发现TapGestureRecognizer水龙头有时会取消他们的子视图的水龙头。 这在以前的iOS版本中从来没有这样做过,但是我想知道这种行为是否从未被承诺过。 我以为子视图的手势应该取消它的超级查看手势(除非委托人另有规定)。 这是错的还是这是一个错误? 请注意:我不是问如何处理这种情况。 我问,如果有人知道我的假设是不正确的。 我已经重新排列视图,dynamic地添加/删除手势,并创buildgestureRecognizer:shouldReceiveTouch:相当复杂的实现gestureRecognizer:shouldReceiveTouch:纠正这种情况。 这并不好玩,但我可以解决这个问题。