iOS调整事件递交beginIgnoringInteractionEvents /endIgnoringInteractionEvents


调整事件传递

对于UIView,将userInteractionEnabled属性设置为NO,或者当视图hidden属性为YES或者alpha为0时,视图也不能接收事件;

对于应用程序来说,在一段时间内关闭触摸事件的递交, 可以调用UIApplication 方法beginIgnoringInteractionEvents 并稍后调用endIgnoringInteractionEvents 方法。 第一个方法使应用程序完全停止接收触摸事件消息;第二个方法恢复接收消息。有些时候你想关掉事件接收比如正在执行动画。

比如,在执行弹框的动画期间,关闭app的事件交互, 执行完成后打开app的事件交互:

- (void)showInView:(UIView *)view animated:(BOOL)animated {
    NSAssert(!self.visible, @"Action Sheet is already visisble!");

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];

    _targetView = view;

    [self layoutSheetInitial:YES];

    void (^completion)(void) = ^{
        [[UIApplication sharedApplication] endIgnoringInteractionEvents];
    };

    [self layoutForVisible:!animated];

    [_targetView addSubview:self];

    if (!animated) {
        completion();
    }
    else {
        CGFloat duration = (iPad ? 0.3f : kAnimationDurationForSectionCount(self.sections.count));

        [UIView animateWithDuration:duration animations:^{
            [self layoutForVisible:YES];
        } completion:^(BOOL finished) {
            completion();
        }];
    }
}

多点触摸

在UIView中将multipleTouchEnabled属性设置为YES;如果多点触摸已经打开,则在touches和UIEvent中则会存在多个UITouch对象,否则在touches中只会有一个UITouch对象。

附件: