Тип выражения Swift 4 '@value CGRect' является неоднозначным без дополнительного контекста - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь реализовать анимацию для прямоугольника, чтобы выполнить модальное вертикальное смахивание. Однако, когда я пытаюсь скомпилировать код, я получаю следующую ошибку «Тип выражения Swift 4« @value CGRect »является неоднозначным без дополнительного контекста». Я изолировал проблему с аргументами, которые передаются значению инициализации CGRect, но в соответствии с документацией Apple по iOS этих параметров должно быть достаточно, чтобы указать представление 'frame', которое мне нужно анимировать.

Вот мой код:

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    guard
        let fromView = transitionContext.viewController(forKey: .from),
        let toView = transitionContext.viewController(forKey: .to)

    else {
            return
    }
    let containerView = transitionContext.containerView
    containerView.insertSubview((toView.view)!, belowSubview: (fromView.view)!)

    let toFrame = transitionContext.finalFrame(for: toView)

    let screenBounds = UIScreen.main.bounds

    let bottomLeftCorner = CGPoint(x: 0, y: screenBounds.height)

    let finalFrameForVC = CGRect(origin: bottomLeftCorner, size: screenBounds.size)

    UIView.animate(withDuration: 2, delay: 1,
                   options: [], (using: transitionContext.finalFrame(for: fromView)),
        animations: {
            fromView.view.frame = finalFrameForVC
    },
        completion: { _ in
            transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
    })
}

Ответы [ 11 ]

0 голосов
/ 23 июля 2018

Это не ваше finalFrameForVC, которое вызывает исключение: "@value CGRect 'является неоднозначным без дополнительного контекста", но это fromView.view.frame.

Исправьте это, объявив fromView.view явно как UIView:

UIView.animate(withDuration: 2, delay: 1, options: [], animations: {
      let view: UIView = fromView.view
      view.frame = finalFrameForVC as! CGRect
    }) { _ in
      transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
    }
...