排查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或者专门做了某种限制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容