iOS 10 为自定义动画 View Controller 过渡添加了一个新功能,称为
interruptibleAnimator(using:)
很多人似乎都在使用新函数,但是通过在interruptibleAnimator(using:)中的UIViewPropertyAnimator的动画块中简单地实现他们的旧animateTransition(using:)(参见Session 216 from 2016)
但是,我找不到任何人实际使用可中断动画师来创建可中断过渡的示例。似乎每个人都支持它,但实际上没有人使用它。
例如,我使用 UIPanGestureRecognizer 在两个 UIViewController 之间创建了一个自定义转换。两个 View Controller 都设置了 backgroundColor,中间有一个 UIButton,用于更改 touchUpInside 上的 backgroundColour。
现在我已经简单地实现了动画:
左/右(取决于所需的方向)
fromViewController.view
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/