Сжатие ViewController для перехода в круглую форму - Swift - PullRequest
0 голосов
/ 11 июня 2019

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

enter image description here

https://github.com/AladinWay/TransitionButton

Я поместил свою кнопку в правом нижнем углу экрана и смог развернуть ее, используя следующую функцию:

private func expand(completion:(()->Void)?, revertDelay: TimeInterval) {

    let expandAnim = CABasicAnimation(keyPath: "transform.scale")
    let expandScale = (UIScreen.main.bounds.size.height/self.frame.size.height)*2
    expandAnim.fromValue            = 1.0
    expandAnim.toValue              = max(expandScale,26.0)
    expandAnim.timingFunction       = expandCurve
    expandAnim.duration             = 0.3
    expandAnim.fillMode             = .forwards
    expandAnim.isRemovedOnCompletion  = false

    CATransaction.setCompletionBlock {
        completion?()
        // We return to original state after a delay to give opportunity to custom transition
        DispatchQueue.main.asyncAfter(deadline: .now() + revertDelay) {
            self.setOriginalState(completion: nil)
            self.layer.removeAllAnimations() // make sure we remove all animation
        }
    }

    layer.add(expandAnim, forKey: expandAnim.keyPath)

    CATransaction.commit()
}

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

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете попробовать использовать точно такой же блок, за исключением переключения fromValue и toValue.

expandAnim.fromValue            = max(expandScale,26.0)
expandAnim.toValue              = 1.0
...