Я пытаюсь следовать примеру в этом проекте, чтобы создать переход контроллера представления расширения / сжатия. В моем случае представляемый контроллер представления будет иметь тот же цвет фона, что и сама кнопка, поэтому эта анимация, по сути, представляет собой просто кнопку, расширяющуюся, чтобы охватить весь экран, при этом не исчезая.
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()
}
Теперь я пытаюсь создать анимацию для отклонения контроллера представления, который по существу полностью изменил бы начальную анимацию и уменьшил бы весь экран до круглой кнопки в нижней части экрана. Я не уверен, как адаптировать приведенный выше код, чтобы изменить это, хотя.