iOS 10增加了一个自定义动画视图控制器转换的新功能,称为interruptibleAnimator(using:)。
许多人似乎正在使用这个新功能,然而他们只是在interruptibleAnimator(using:)中实现旧的animateTransition(using:)方法(请参见2016年的Session 216),并没有真正使用可中断动画器来创建可中断的转换。例如,我使用UIPanGestureRecognizer创建了两个UIViewController之间的自定义转换。两个视图控制器都有设置backgroundColor属性,以及一个位于中间的UIButton,在touchUpInside时更改背景颜色。
现在,我只需将动画实现为:
1.将toViewController.view设置为位于fromViewController.view的左侧/右侧(根据需要的方向)。
2.在UIViewPropertyAnimator的动画块中,我将toViewController.view滑入视图,并将fromViewController.view滑出视图(屏幕外)。
但是,在转换期间,我希望能够按下UIButton,但是无法响应按钮按下事件。奇怪的是,这就是该会话所暗示的方式,我将自定义UIView设置为我的两个UIViewController的视图。
许多人似乎正在使用这个新功能,然而他们只是在interruptibleAnimator(using:)中实现旧的animateTransition(using:)方法(请参见2016年的Session 216),并没有真正使用可中断动画器来创建可中断的转换。例如,我使用UIPanGestureRecognizer创建了两个UIViewController之间的自定义转换。两个视图控制器都有设置backgroundColor属性,以及一个位于中间的UIButton,在touchUpInside时更改背景颜色。
现在,我只需将动画实现为:
1.将toViewController.view设置为位于fromViewController.view的左侧/右侧(根据需要的方向)。
2.在UIViewPropertyAnimator的动画块中,我将toViewController.view滑入视图,并将fromViewController.view滑出视图(屏幕外)。
但是,在转换期间,我希望能够按下UIButton,但是无法响应按钮按下事件。奇怪的是,这就是该会话所暗示的方式,我将自定义UIView设置为我的两个UIViewController的视图。
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正在接受hitTest,但按钮的操作并没有被调用。
有人能让这个工作起来吗?
我想错了吗?中断式转换只是暂停/恢复过渡动画,而不是用于交互吗?
iOS11几乎全部使用了我认为是中断式转换,这使你可以将控制中心拉到50%的位置并与之交互,而不需要释放控制中心窗格 然后再将其滑回去。这正是我想要做的。
提前感谢!今年夏天我花了很长时间尝试让这个工作,或者找到其他人也在尝试同样的事情。