美文网首页
iOS Touch事件不响应的一种情况

iOS Touch事件不响应的一种情况

作者: 高浩浩浩浩浩浩 | 来源:发表于2016-04-29 10:43 被阅读6439次

今天遇见了一件很诡异的情况,在真机上调试发现点击UIView的时候会出现选中状态未更新的问题,打了断点后发现逻辑又是正常的,每次点击都会进入响应事件的方法,然后初步把bug定位在UI的更新阻碍了事件的响应,在touch事件分别打了断点逐步查看:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self setBackgroundColor:[UIColor colorWithRed:0.969 green:0.969 blue:0.969 alpha:1]];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
[self setBackgroundColor:[UIColor whiteColor]];
}

- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"🐶🐶🐶🐶🐶🐶");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self setBackgroundColor:[UIColor whiteColor]];
if (self.editable) {
    [self switchSelectMode];
}
if(_clickTargetObj && _clickTargetAction && [_clickTargetObj respondsToSelector:_clickTargetAction]){
    [self setBackgroundColor:[UIColor colorWithRed:0.969 green:0.969 blue:0.969 alpha:1]];
    [_clickTargetObj performSelector:_clickTargetAction withObject:self];
    
    __weak UIBaseFileListView *me = self;
    [UIView animateWithDuration:0.1f animations:^{
        [me setBackgroundColor:[UIColor whiteColor]];
    } completion:^(BOOL finished) {
    }];
}

结果发现在频繁点击的时候连touchBegin事件都没有响应,然后检查代码,发现在注释掉[UIView animateWith...]的动画后正常了。
感觉是UIView在执行动画的时候会屏蔽掉touch事件,默认把userInteractionEnabled改为false

更新

查了下SDK,在userInteractionEnabled的文档里有提到这个问题:

During an animation, user interactions are temporarily disabled for all views involved in the animation, regardless of the value in this property. You can disable this behavior by specifying theUIViewAnimationOptionAllowUserInteraction
option when configuring the animation.

相关文章

  • iOS Touch事件不响应的一种情况

    今天遇见了一件很诡异的情况,在真机上调试发现点击UIView的时候会出现选中状态未更新的问题,打了断点后发现逻辑又...

  • iOS 事件不响应的几种情况

    实际开发中我们有时候会遇到,UIButton 或者其它视图 明明添加了点击事件,但是总是无法捕捉响应事件的现象。目...

  • iOS 事件机制

    事件 iOS 将事件分为三类: Touch Motion Remote像耳机线控…… Touch 事件 Touch...

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • touchBegin事件

    iOS 11之后,会先走touch事件,再走tableView的didselect事件

  • iOS 事件传递和事件响应

    事件的产生 iOS中事件分为:触摸事件(Touch Events)、运动事件(Motion Events)、远程事...

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • 事件响应和响应者链

    iOS 的事件主要分为以下几类: Touch Events(触摸事件) Motion Events(运动事件,比如...

  • iOS事件机制

    iOS事件可以分为3种: Touch Events(触摸事件) Motion Events(运动事件) Remot...

  • iOS 事件传递机制

    iOS的事件分为以下几种 Touch Events 触摸事件 Shake-motion events 运动事件,比...

网友评论

      本文标题:iOS Touch事件不响应的一种情况

      本文链接:https://www.haomeiwen.com/subject/zcghrttx.html