如何判断UIAlertView是否显示

  • 最近在做一个截屏功能,把截屏的图片展示在界面上,本来是打算从相册取出直接展示在界面,因为从相册取得图片是完整的,但发现存在2个问题:1.相册需要用户授权,否则无法展示截图。2.更重要的原因,ios11从相册取截图需要时间明显变慢了(马上取会取到倒数第二张图片)。
  • 为了缩减截屏时间,截图直接用Core Graphics画出来,但存在一个问题,存在UIAlertView,Core Graphics是无法画出的。为了避免这个问题,如果界面有UIAlertView,就不展示截屏图片。 但如何判断UIAlertView是否存在界面上呢?google,百度都没找到答案,后面发现UIAlertView的superView竟然还为nil,最后经过探索发现alertView出现时,主窗口keyWindow会发生变化,会切换为_UIAlertControllerShimPresenterWindow,所以找到了方法判断UIAlertView是否展示。
    if ([[UIApplication sharedApplication].keyWindow isKindOfClass:NSClassFromString(@"_UIAlertControllerShimPresenterWindow")]) return; //窗口上有弹窗 就不展示截屏

你可能感兴趣的:(如何判断UIAlertView是否显示)