iOS 5.0 sendEvent 被调用了两次 [2] 次

Posted

技术标签:

【中文标题】iOS 5.0 sendEvent 被调用了两次 [2] 次【英文标题】:iOS 5.0 sendEvent called two [2] times 【发布时间】:2012-05-14 06:06:31 【问题描述】:

我对 UIWindow 进行了子类化,但由于某种原因, - (void)sendEvent:(UIEvent *)event 被调用了 2 次,用于与屏幕的任何交互。任何想法为什么会发生这种情况?

【问题讨论】:

那么,发送了哪些事件?这些信息会很有用......我想名字是 touchesBegan 和 touchesMoved。 好吧,我触摸屏幕。据我了解,sendEvent/UIWindow 位于响应者链的根部。在任何其他视图可以将此事件获取到它自己的 touchesBegan 方法之前,该视图由 UIWindow hitTest 方法找到。所以我的触摸生成了 2 个 sendEvents.. 都找到了视图.. 但我不明白为什么我有 2 个由简单的触摸生成的事件。 在方法中记录事件的名称,这应该可以帮助您获得更多信息。 【参考方案1】:

出于调试目的,子类窗口(应用程序委托)并覆盖 sendEvent: 方法

-(void) sendEvent:(UIEvent *)event

    NSLog(@"%@",event);
    [super sendEvent:event];

您很可能会注意到负责 TouchesBegan 和 TouchesEnded(用于点击)的事件。这可以通过继承 View 并覆盖与触摸相关的方法来测试。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    NSLog(@"tocuhesBegan");

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

    NSLog(@"touchesMoved");

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

    NSLog(@"touchesEnded");

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

    NSLog(@"touchesCancelled");

另外,请尝试在视图上拖动/滑动以注意发送到视图的事件计数的变化 :)

【讨论】:

完全正确..因为没有意识到这一点而感到愚蠢..非常感谢。【参考方案2】:

fingerDown 和 allFingersUp 调用 sendEvent

【讨论】:

以上是关于iOS 5.0 sendEvent 被调用了两次 [2] 次的主要内容,如果未能解决你的问题,请参考以下文章

didRegisterUserNotificationSettings 被调用了两次?

为啥我的 UIViewController 被加载了两次? IOS 7

textViewShouldBeginEditing 在 iOS7 中被调用两次

iOS - drawRect:调用了两次

Nuxt apollo 智能查询被调用了两次。引擎盖下会发生啥?

为啥在 Swift 中 CollectionView 函数被调用了两次?