Анимация перехода Swift ViewController начинается в неправильном положении - PullRequest
0 голосов
/ 09 мая 2020

Я начал смотреть на анимации перехода View Controller. У меня есть два контроллера просмотра basi c. В контроллере начального представления у меня есть изображение в заданной позиции на экране. Когда я нажимаю кнопку, я ожидаю, что изображение во втором контроллере представления переместится из положения изображения, найденного в контроллере начального представления, в центр экрана.

Это начальный контроллер представления:

enter image description here

Это второй контроллер представления, показывающий, что анимация по какой-то причине начинается в верхнем левом углу, а затем анимируется в центре экрана.

enter image description here. enter image description here

Вот код, который я использую:

extension ViewController: UIViewControllerTransitioningDelegate {

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transition.fromCenter = self.profileImage.center

        guard let viewControllerTwo = presented as? ViewControllerTwo else { return nil }
        transition.toCenter = viewControllerTwo.profileImage.center

        return transition
    }

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
      return transition
    }

}

Мой код анимации:

class MyAnimation:NSObject, UIViewControllerAnimatedTransitioning {

    let duration = 10.0
    var fromCenter = CGPoint.zero
    var toCenter = CGPoint.zero

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return duration
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        let containerView = transitionContext.containerView

        guard let toViewController = transitionContext.viewController(forKey: .to) as? ViewControllerTwo else { return }
        toViewController.profileImage.center = fromCenter
        toViewController.profileImage.transform = CGAffineTransform(scaleX: 0.3, y: 0.3)

        containerView.addSubview(toViewController.view)
        containerView.bringSubviewToFront(toViewController.view)

        UIView.animate(withDuration: duration, delay: 0.0, options: .curveEaseInOut, animations: {
            toViewController.profileImage.center = self.toCenter
            toViewController.profileImage.transform = .identity
        }, completion: { _ in

          transitionContext.completeTransition(true)
        })
    }


}

Исходный код ViewController:

class ViewController: UIViewController {

    let transition = MyAnimation()

    @IBOutlet weak var profileImage: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named:"teamwork")
        profileImage.image = image
    }

    @IBAction func buttonPressed(_ sender: Any) {

        guard let storyboard = self.storyboard else { return }

        guard let viewController2 = storyboard.instantiateViewController(withIdentifier: "ViewControllerTwo") as? ViewControllerTwo else {
            return
        }

        viewController2.profileImageData = profileImage.image
        viewController2.modalPresentationStyle = .overFullScreen
        viewController2.transitioningDelegate = self
        self.present(viewController2, animated: true, completion: nil)
    }


}

Второй код контроллера представления:

class ViewControllerTwo: UIViewController {

    @IBOutlet weak var profileImage: UIImageView!

    var profileImageData:UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()

        self.profileImage.image = profileImageData
}

Я думаю, что если я установлю центр imageView во втором контроллере представления, он должен начать анимацию с этой позиции, т.е.

toViewController.profileImage.center = fromCenter

Должен остановить запуск анимации в верхнем левом углу второго контроллера представления. Ясно, что это не так, и я явно делаю что-то не так. Я просто не уверен на 100% где. Помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...