美文网首页
排查iOS11上presentModalViewControll

排查iOS11上presentModalViewControll

作者: jolinpz | 来源:发表于2018-01-22 03:32 被阅读0次

    最近遇到一个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上presentModalViewControll

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