排查iOS11上presentModalViewControll
2018-01-22 本文已影响0人
jolinpz
最近遇到一个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做背景,无任何改动。经过测试:
- 移除背景imageView,工作正常;
- 空imageView,imageView.image = nil,出现bug;
- 隐藏空imageView或者设置alpha = 0,相同bug;
- imageView的图片不为空,工作正常;
看来在iOS11上不要添加空的imageView,特别是有动画暂停的场景。
该bug非常奇怪,估计是iOS11系统的bug或者专门做了某种限制。