iOS 10 为自定义动画 View Controller 过渡添加了一个新功能,称为
interruptibleAnimator(using:)

很多人似乎都在使用新函数,但是通过在interruptibleAnimator(using:)中的UIViewPropertyAnimator的动画块中简单地实现他们的旧animateTransition(using:)(参见Session 216 from 2016)

但是,我找不到任何人实际使用可中断动画师来创建可中断过渡的示例。似乎每个人都支持它,但实际上没有人使用它。

例如,我使用 UIPanGestureRecognizer 在两个 UIViewController 之间创建了一个自定义转换。两个 View Controller 都设置了 backgroundColor,中间有一个 UIButton,用于更改 touchUpInside 上的 backgroundColour。

现在我已经简单地实现了动画:

  • 设置 toViewController.view 定位到
    左/右(取决于所需的方向)
    fromViewController.view
  • 在 UIViewPropertyAnimator 动画块中,我滑动
    toViewController.view 进入 View ,而 fromViewController.view 退出
    View (屏幕外)。

  • 现在,在过渡期间,我希望能够按下那个 UIButton。但是,没有调用按钮按下。奇怪的是,这就是 session 暗示的事情应该如何工作,我将自定义 UIView 设置为我的两个 UIViewController 的 View ,如下所示:
    class HitTestView: UIView {
        override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
            let view = super.hitTest(point, with: event)
            if view is UIButton {
                print("hit button, point: \(point)")
            }
            return view
        }
    }
    
    class ViewController: UIViewController {
    
         let button = UIButton(type: .custom)
    
         override func loadView() {
             self.view = HitTestView(frame: UIScreen.main.bounds)
         }
        <...>
    }
    

    并注销 func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?结果。 UIButton 正在被 hitTested,但是,按钮 Action 没有被调用。

    有没有人得到这个工作?

    我是否在考虑这个错误并且可中断的过渡只是为了暂停/恢复过渡动画,而不是为了交互?

    几乎所有的 iOS11 都使用我认为是可中断的过渡,例如,允许您将控制中心拉起 50% 并与之交互,而无需释放控制中心 Pane 然后将其滑回。这正是我想要做的。

    提前致谢!今年夏天花了很长时间试图让这个工作,或者找到其他人试图做同样的事情。

    最佳答案

    我已经发布了示例代码和一个可重用的框架来演示可中断的 View Controller 动画转换。它被称为 PullTransition 并且只需向下滑动即可轻松关闭或弹出 View Controller 。如果文档需要改进,请告诉我。我希望这有帮助!

    关于ios - 如何在 iOS 上创建工作的可中断 View Controller 转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45443593/

    10-16 23:34