Анимация масштаба представления изображения в режиме содержимого .scaleAspectFill во время пользовательского перехода - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть два контроллера представления.Оба они содержат представления изображений, и их режимы содержимого .scaleAspectFill.

Я использую пользовательскую анимацию перехода для модального перехода от первого контроллера представления ко второму.Во время анимации я добавляю другой вид изображения поверх первого в первом контроллере вида и масштабирую его до тех пор, пока он не охватит весь экран.Второй контроллер представления содержит представление изображения, которое охватывает весь экран, поэтому в конце перехода я удаляю временный.

Вот код перехода в аниматоре (originFrame - этокадр представления изображения в первом контроллере представления):

 func handleImageViewAnimations(completion: @escaping (()->Void)) {
    guard let containerView = containerView, let toView = toView else {
        return
    }

    let imageView = UIImageView.init(frame: originFrame)
    imageView.image = image
    imageView.contentMode = .scaleAspectFill
    imageView.clipsToBounds = true



    containerView.addSubview(imageView)
    containerView.insertSubview(toView, aboveSubview: imageView)
    toView.alpha = 0.0

    containerView.bringSubview(toFront: imageView)



    let xFactor = toView.frame.width / originFrame.width
    let yFactor = toView.frame.height / originFrame.height


    CATransaction.begin()
    CATransaction.setAnimationDuration(animationDuration)
    CATransaction.setCompletionBlock(completion)

    UIView.animate(withDuration: animationDuration, animations: {
        imageView.transform = CGAffineTransform(scaleX:xFactor, y:  yFactor)
        imageView.center = toView.center
    }) { (_) in
        imageView.setNeedsDisplay()
        imageView.removeFromSuperview()
        toView.alpha = 1.0
    }

    CATransaction.commit()
}

Однако, поскольку режим содержимого представлений изображения равен .scaleAspectFill, конец анимации не является плавным.Это происходит потому, что в этом режиме содержимого изображения отображаются по-разному в представлениях изображений в зависимости от их границ.Анимация в основном растягивает вид изображения, однако она не учитывает, что различные части изображения видны в зависимости от размера границ вида изображения.GIF ниже показывает, что я имею в виду:

enter image description here

Эта анимация с представлениями изображений, которые имеют режим содержания .scaleToFill, работает очень хорошо, однако яхотел бы реализовать это в режиме scaleAspectFill.

Если вы знаете, как сделать анимацию плавной, я был бы признателен за вашу помощь.

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