From ee463a0f190be3dfabf55e99d7d8696c598fd64d Mon Sep 17 00:00:00 2001 From: Will McGinty Date: Thu, 12 Sep 2019 18:56:32 -0500 Subject: [PATCH 1/3] Fix an iOS 13 related issue with default animator --- .../DefaultContainerTransitionAnimator.swift | 45 ++++++------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift b/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift index 93ce54e..e9afe56 100644 --- a/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift +++ b/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift @@ -9,43 +9,26 @@ import UIKit /// This class is internal to the framework. It is the internal default transition animator used by the ContainerViewController when its delegate does not provide one. class DefaultContainerTransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning { - - // MARK: Properties - private var interruptibleAnimator: UIViewPropertyAnimator? - - // MARK: ContainerViewControllerAnimatedTransitioning + + // MARK: UIViewControllerAnimatedTransitioning func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.3 } - func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - interruptibleAnimator?.startAnimation() - } - - func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating { - guard let destination = transitionContext.view(forKey: .to), let source = transitionContext.view(forKey: .from) else { + func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { + guard let destinationController = transitionContext.viewController(forKey: .to), + let destination = destinationController.view, let source = transitionContext.view(forKey: .from) else { fatalError("The context is improperly configured - requires both a source and destination.") } - if let animator = interruptibleAnimator { - return animator - } - - let duration = transitionDuration(using: transitionContext) - let timingParameters = UICubicTimingParameters(animationCurve: .easeInOut) - let propertyAnimator = UIViewPropertyAnimator(duration: duration, timingParameters: timingParameters) - propertyAnimator.addAnimations { - UIView.transition(from: source, to: destination, duration: duration, options: [.transitionCrossDissolve]) { finished in - transitionContext.completeTransition(finished) - } - } - - propertyAnimator.addCompletion { [weak self] animatingPosition in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - self?.interruptibleAnimator = nil - } - - interruptibleAnimator = propertyAnimator - return propertyAnimator + transitionContext.containerView.addSubview(destination) + destination.frame = transitionContext.finalFrame(for: destinationController) + + UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: { + source.alpha = 0 + destination.alpha = 1 + }) { _ in + transitionContext.completeTransition(true) + } } } From c4f7f7b3016e9f2e3e7ace88560aee4a5b477cde Mon Sep 17 00:00:00 2001 From: Will McGinty Date: Thu, 12 Sep 2019 19:13:34 -0500 Subject: [PATCH 2/3] Changelog entry --- CHANGELOG.md | 4 ++++ .../DefaultContainerTransitionAnimator.swift | 15 ++++----------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27cd5c2..a8868d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ [Will McGinty](https://github.com/willmcginty) [#77](https://github.com/BottleRocketStudios/iOS-UtiliKit/pull/77) +* Fix a transitionting issue where appearance callbacks were unbalanced in iOS 13. +[Will McGinty](https://github.com/willmcginty) +[#78](https://github.com/BottleRocketStudios/iOS-UtiliKit/pull/78) + ## 1.6.0 (2019-08-29) ##### Enhancements diff --git a/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift b/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift index e9afe56..8cd1a7e 100644 --- a/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift +++ b/Sources/UtiliKit/Container/Transitioning/DefaultContainerTransitionAnimator.swift @@ -12,23 +12,16 @@ class DefaultContainerTransitionAnimator: NSObject, UIViewControllerAnimatedTran // MARK: UIViewControllerAnimatedTransitioning func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { - return 0.3 + return 0.0 } - func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - guard let destinationController = transitionContext.viewController(forKey: .to), - let destination = destinationController.view, let source = transitionContext.view(forKey: .from) else { + func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { + guard let destinationController = transitionContext.viewController(forKey: .to), let destination = destinationController.view else { fatalError("The context is improperly configured - requires both a source and destination.") } transitionContext.containerView.addSubview(destination) destination.frame = transitionContext.finalFrame(for: destinationController) - - UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: { - source.alpha = 0 - destination.alpha = 1 - }) { _ in - transitionContext.completeTransition(true) - } + transitionContext.completeTransition(true) } } From 20fb7aba3535cd09f2f900898e5e437fefb28025 Mon Sep 17 00:00:00 2001 From: Will McGinty Date: Thu, 12 Sep 2019 19:16:45 -0500 Subject: [PATCH 3/3] Fix PR # in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8868d5..2865bab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ * Fix a transitionting issue where appearance callbacks were unbalanced in iOS 13. [Will McGinty](https://github.com/willmcginty) -[#78](https://github.com/BottleRocketStudios/iOS-UtiliKit/pull/78) +[#79](https://github.com/BottleRocketStudios/iOS-UtiliKit/pull/79) ## 1.6.0 (2019-08-29)