排查iOS11上presentModalViewController无响应问题

最近遇到一个iOS11上的bug,Present UIAlertController后不能点击,整个界面无响应,而iOS10及以下版本工作正常。又测试通过presentModalViewController弹出普通VC,存在相同问题。

经过调试发现点击事件并没有传到被弹出的视图上面。只能子类化UIWindow,重写- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,看一下点击事件被谁接收了。发现是present动画执行时出现的maskView接收了事件,正常情况下,maskView在动画执行完毕会被移除。而该bug下,maskView一直存在,动画好像停止了。

突然想到弹出Alert前,该模块会通过以下代码,暂停内部视图的动画。但是不应该影响到新弹出来的view,二者除了在同一个UIWindow的视图树内,无任何关联。

- (void)pauseView:(UIView *)view {
    CFTimeInterval pausedTime = [view.layer convertTime:CACurrentMediaTime() fromLayer:nil];
    view.layer.speed = .0f;
    view.layer.timeOffset = pausedTime;
}

排查线上版本在iOS11上工作正常,无任何问题。而本次迭代,除了在被暂停动画的视图底部加了一个UIImageView做背景,无任何改动。经过测试:

  1. 移除背景imageView,工作正常;
  2. 空imageView,imageView.image = nil,出现bug;
  3. 隐藏空imageView或者设置alpha = 0,相同bug;
  4. imageView的图片不为空,工作正常;

看来在iOS11上不要添加空的imageView,特别是有动画暂停的场景。

该bug非常奇怪,估计是iOS11系统的bug或者专门做了某种限制。

你可能感兴趣的:(排查iOS11上presentModalViewController无响应问题)