Ios 在视图控制器演示动画期间响应触摸事件

Ios 在视图控制器演示动画期间响应触摸事件,ios,swift,animation,uiwindow,uiviewpropertyanimator,Ios,Swift,Animation,Uiwindow,Uiviewpropertyanimator,在我的iOS应用程序中,我有一个Toast视图,它的工作原理很像Android上的Toast。当祝酒词出现时,它会在屏幕的一个小区域显示几秒钟,然后自动取消。烤面包有两个主要特性: 当屏幕上出现祝酒词时,用户可以像习惯一样在应用程序中导航 toast是粘性的,这意味着无论发生什么情况,它都会在屏幕上停留指定的时间(即使在按下、弹出、显示和关闭其他视图控制器时) 为了实现“粘性”,祝酒词在UIWindow的子类中呈现。更具体地说,我在自定义窗口的根视图控制器上调用present(toastView

在我的iOS应用程序中,我有一个
Toast
视图,它的工作原理很像Android上的Toast。当祝酒词出现时,它会在屏幕的一个小区域显示几秒钟,然后自动取消。烤面包有两个主要特性:

  • 当屏幕上出现祝酒词时,用户可以像习惯一样在应用程序中导航
  • toast是粘性的,这意味着无论发生什么情况,它都会在屏幕上停留指定的时间(即使在按下、弹出、显示和关闭其他视图控制器时)
  • 为了实现“粘性”,祝酒词在
    UIWindow
    的子类中呈现。更具体地说,我在自定义窗口的根视图控制器上调用
    present(toastViewController,动画:true,完成:nil)
    ,它使用自定义动画呈现toast,我使用
    UIViewPropertyAnimator
    UIViewControllerTransitioningDelegate
    以及
    UIViewControllerAnimatedTransitioning
    实现了该动画。由于窗口填满了整个屏幕,我已经覆盖了它的
    点(内部点:CGPoint,with event:UIEvent?
    方法以始终返回false。这会将触摸事件传播到包含toast下方实际界面的按键窗口

    这在屏幕上显示烤面包时效果很好,但是(这就是问题所在)当烤面包在屏幕上和屏幕下进行动画制作时,“关键点”窗口中的UI被冻结。这意味着,如果用户在toast解除时在表视图中滚动,UI将挂起约0.5秒


    我已经验证了触摸事件确实可以在动画期间传播到按键窗口,但它们在到达实际UI元素之前不知何故进入了死胡同。我的猜测是,这与占据主线的动画有关,但不管怎样,我都希望听到关于如何解决这一问题的建议。

    您可以在窗口上以视图的形式子视图toast。此外,还可以对动画使用CGAfflineTransform