排查iOS11上presentModalViewController無響應問題

最近遇到一個iOS11上的bug,Present UIAlertController后不能點擊,整個界面無響應,而iOS10及以下版本工作正常。又測試通過presentModalViewController彈出普通VC,存在相同問題。

經(jīng)過調試發(fā)現(xiàn)點擊事件并沒有傳到被彈出的視圖上面。只能子類化UIWindow,重寫- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,看一下點擊事件被誰接收了。發(fā)現(xiàn)是present動畫執(zhí)行時出現(xiàn)的maskView接收了事件,正常情況下,maskView在動畫執(zhí)行完畢會被移除。而該bug下,maskView一直存在,動畫好像停止了。

突然想到彈出Alert前,該模塊會通過以下代碼,暫停內部視圖的動畫。但是不應該影響到新彈出來的view,二者除了在同一個UIWindow的視圖樹內,無任何關聯(lián)。

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

排查線上版本在iOS11上工作正常,無任何問題。而本次迭代,除了在被暫停動畫的視圖底部加了一個UIImageView做背景,無任何改動。經(jīng)過測試:

  1. 移除背景imageView,工作正常;
  2. 空imageView,imageView.image = nil,出現(xiàn)bug;
  3. 隱藏空imageView或者設置alpha = 0,相同bug;
  4. imageView的圖片不為空,工作正常;

看來在iOS11上不要添加空的imageView,特別是有動畫暫停的場景。

該bug非常奇怪,估計是iOS11系統(tǒng)的bug或者專門做了某種限制。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容