У меня есть 2 контроллера представления (ViewController и SecondViewController) и 1 контроллер навигации:
Мой проект, использующий пользовательскую анимацию перехода от ViewController к SecondViewController:
import UIKit
class TransitionManager: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.8
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
var transform = CATransform3DIdentity
let container = transitionContext.containerView
guard let fromView = transitionContext.view(forKey: .from) else { return }
guard let toView = transitionContext.view(forKey: .to) else { return }
transform.m34 = -0.0019
container.layer.sublayerTransform = transform
container.insertSubview(toView, belowSubview: fromView)
fromView.layer.anchorPoint = CGPoint(x: 0.0, y: 0.5)
fromView.layer.position = CGPoint(x: 0, y: UIScreen.main.bounds.midY)
UIView.animate(withDuration: transitionDuration(using: transitionContext)) {
fromView.layer.transform = CATransform3DMakeRotation(-.pi/2, 0, 1.0, 0)
}
}
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
}
В ViewController (где изображение двери) я использую задержку, чтобы запустить анимацию перехода и перейти к SecondViewController (где зеленый фон).
class ViewController: UIViewController {
let transitionManager = TransitionManager()
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: {
self.performSegue(withIdentifier: "segue", sender: self)
})
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let navigationViewController = segue.destination as? UINavigationController else { return }
navigationViewController.transitioningDelegate = transitionManager
}
}
SecondViewController имеет функцию нажатия кнопки:
class SecondViewController: UIViewController, UIViewControllerTransitioningDelegate {
override func viewDidLoad() {
super.viewDidLoad()
print(view.isUserInteractionEnabled)
}
@IBAction func tapBtn(_ sender: UIButton) {
print("btn pressed") //it is not worked. Why?
}
}
Анимация работает правильно, но SecondViewController (зеленый фон) не реагирует на нажатия кнопок. Код в SecondViewController
print(view.isUserInteractionEnabled)
верните истину. Где проблема в моем коде? Я хочу нажать кнопку, чтобы работать.