Commit 3aef3675 by Daniel Dahan

development: simplified MotionTransition rotation code

parent 5e35f736
...@@ -39,7 +39,7 @@ fileprivate struct MotionTransitionItem { ...@@ -39,7 +39,7 @@ fileprivate struct MotionTransitionItem {
} }
fileprivate struct MotionTransitionItemController { fileprivate struct MotionTransitionItemController {
fileprivate var delegate: MotionTransitionDelegate fileprivate var delegate: MotionTransitionAnimator
} }
fileprivate func getRotationInDegrees(view: UIView) -> Double { fileprivate func getRotationInDegrees(view: UIView) -> Double {
...@@ -52,7 +52,7 @@ extension UIViewController { ...@@ -52,7 +52,7 @@ extension UIViewController {
fileprivate var motionTransition: MotionTransitionItemController { fileprivate var motionTransition: MotionTransitionItemController {
get { get {
return AssociatedObject(base: self, key: &MotionTransitionItemControllerKey) { return AssociatedObject(base: self, key: &MotionTransitionItemControllerKey) {
return MotionTransitionItemController(delegate: MotionTransitionDelegate()) return MotionTransitionItemController(delegate: MotionTransitionAnimator())
} }
} }
set(value) { set(value) {
...@@ -60,7 +60,7 @@ extension UIViewController { ...@@ -60,7 +60,7 @@ extension UIViewController {
} }
} }
open var transitionDelegate: MotionTransitionDelegate { open var transitionDelegate: MotionTransitionAnimator {
return motionTransition.delegate return motionTransition.delegate
} }
} }
...@@ -133,15 +133,9 @@ extension UIView { ...@@ -133,15 +133,9 @@ extension UIView {
let oldCornerRadius = view.cornerRadius let oldCornerRadius = view.cornerRadius
view.cornerRadius = 0 view.cornerRadius = 0
let oldRotation = view.layer.value(forKeyPath: MotionAnimationKeyPath.rotation.rawValue) ?? 0
view.layer.setValue(0, forKeyPath: MotionAnimationKeyPath.rotation.rawValue)
let v = view.snapshotView(afterScreenUpdates: afterUpdates)! let v = view.snapshotView(afterScreenUpdates: afterUpdates)!
view.cornerRadius = oldCornerRadius view.cornerRadius = oldCornerRadius
view.layer.setValue(oldRotation, forKeyPath: MotionAnimationKeyPath.rotation.rawValue)
v.layer.setValue(oldRotation, forKeyPath: MotionAnimationKeyPath.rotation.rawValue)
let contentView = v.subviews.first! let contentView = v.subviews.first!
contentView.cornerRadius = view.cornerRadius contentView.cornerRadius = view.cornerRadius
contentView.masksToBounds = true contentView.masksToBounds = true
...@@ -163,7 +157,7 @@ extension UIView { ...@@ -163,7 +157,7 @@ extension UIView {
v.shadowColor = view.shadowColor v.shadowColor = view.shadowColor
v.shadowOffset = view.shadowOffset v.shadowOffset = view.shadowOffset
v.contentMode = view.contentMode v.contentMode = view.contentMode
// v.layer.transform = view.layer.transform v.layer.transform = view.layer.transform
view.isHidden = true view.isHidden = true
(view as? Pulseable)?.pulse.pulseLayer?.isHidden = false (view as? Pulseable)?.pulse.pulseLayer?.isHidden = false
...@@ -212,15 +206,35 @@ open class MotionTransitionPresentationController: UIPresentationController { ...@@ -212,15 +206,35 @@ open class MotionTransitionPresentationController: UIPresentationController {
} }
} }
open class MotionTransitionDelegate: NSObject { open class MotionTransitionAnimator: NSObject {
open var isPresenting = false open var isPresenting = false
open var toViewController: UIViewController! open var toViewController: UIViewController!
open var fromViewController: UIViewController! open var fromViewController: UIViewController!
open var transitionContext: UIViewControllerContextTransitioning!
open var delay: TimeInterval = 0
open var duration: TimeInterval = 0
open var containerView: UIView!
open var transitionView = UIView()
public var toViews: [UIView] {
var views: [UIView] = []
subviews(of: toViewController.view, views: &views)
return views
}
public var fromViews: [UIView] {
var views: [UIView] = []
subviews(of: fromViewController.view, views: &views)
return views
}
} }
extension MotionTransitionDelegate: UIViewControllerTransitioningDelegate { extension MotionTransitionAnimator: UIViewControllerTransitioningDelegate {
open func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { open func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return MotionTransitionPresentedAnimator() return MotionTransitionPresentedAnimator()
} }
...@@ -242,10 +256,10 @@ extension MotionTransitionDelegate: UIViewControllerTransitioningDelegate { ...@@ -242,10 +256,10 @@ extension MotionTransitionDelegate: UIViewControllerTransitioningDelegate {
} }
} }
extension MotionTransitionDelegate: UINavigationControllerDelegate { extension MotionTransitionAnimator: UINavigationControllerDelegate {
open func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { open func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
isPresenting = operation == .push isPresenting = operation == .push
return MotionTransitionAnimator() return self
} }
open func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { open func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
...@@ -253,13 +267,13 @@ extension MotionTransitionDelegate: UINavigationControllerDelegate { ...@@ -253,13 +267,13 @@ extension MotionTransitionDelegate: UINavigationControllerDelegate {
} }
} }
extension MotionTransitionDelegate: UITabBarControllerDelegate { extension MotionTransitionAnimator: UITabBarControllerDelegate {
open func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { open func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
isPresenting = true isPresenting = true
self.fromViewController = fromViewController ?? fromVC self.fromViewController = fromViewController ?? fromVC
self.toViewController = toViewController ?? toVC self.toViewController = toViewController ?? toVC
// self.inContainerController = true // self.inContainerController = true
return MotionTransitionAnimator() return self
} }
open func tabBarController(_ tabBarController: UITabBarController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { open func tabBarController(_ tabBarController: UITabBarController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
...@@ -267,28 +281,6 @@ extension MotionTransitionDelegate: UITabBarControllerDelegate { ...@@ -267,28 +281,6 @@ extension MotionTransitionDelegate: UITabBarControllerDelegate {
} }
} }
open class MotionTransitionAnimator: MotionTransitionDelegate {
open var transitionContext: UIViewControllerContextTransitioning!
open var delay: TimeInterval = 0
open var duration: TimeInterval = 0
open var containerView: UIView!
open var transitionView = UIView()
public var toViews: [UIView] {
var views: [UIView] = []
subviews(of: toViewController.view, views: &views)
return views
}
public var fromViews: [UIView] {
var views: [UIView] = []
subviews(of: fromViewController.view, views: &views)
return views
}
}
extension MotionTransitionAnimator: UIViewControllerAnimatedTransitioning { extension MotionTransitionAnimator: UIViewControllerAnimatedTransitioning {
@objc(animateTransition:) @objc(animateTransition:)
open func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { open func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
...@@ -316,7 +308,7 @@ extension MotionTransitionAnimator: UIViewControllerAnimatedTransitioning { ...@@ -316,7 +308,7 @@ extension MotionTransitionAnimator: UIViewControllerAnimatedTransitioning {
} }
} }
extension MotionTransitionDelegate { extension MotionTransitionAnimator {
fileprivate func subviews(of view: UIView, views: inout [UIView]) { fileprivate func subviews(of view: UIView, views: inout [UIView]) {
for v in view.subviews { for v in view.subviews {
if 0 < v.motionTransitionIdentifier.utf16.count { if 0 < v.motionTransitionIdentifier.utf16.count {
...@@ -381,9 +373,7 @@ open class MotionTransitionPresentedAnimator: MotionTransitionAnimator { ...@@ -381,9 +373,7 @@ open class MotionTransitionPresentedAnimator: MotionTransitionAnimator {
snapshotChildAnimations.append(Motion.position(x: w / 2, y: h / 2)) snapshotChildAnimations.append(Motion.position(x: w / 2, y: h / 2))
snapshotChildAnimations.append(sizeAnimation) snapshotChildAnimations.append(sizeAnimation)
let rotateAnimation = Motion.rotate(angle: getRotationInDegrees(view: toView)) snapshotAnimations.append(Motion.rotate(angle: getRotationInDegrees(view: toView)))
//rotateAnimation.fromValue = getRotationInDegrees(view: fromView)
snapshotAnimations.append(rotateAnimation)
let cornerRadiusAnimation = Motion.corner(radius: toView.cornerRadius) let cornerRadiusAnimation = Motion.corner(radius: toView.cornerRadius)
snapshotAnimations.append(cornerRadiusAnimation) snapshotAnimations.append(cornerRadiusAnimation)
...@@ -497,9 +487,7 @@ open class MotionTransitionDismissedAnimator: MotionTransitionAnimator { ...@@ -497,9 +487,7 @@ open class MotionTransitionDismissedAnimator: MotionTransitionAnimator {
snapshotChildAnimations.append(Motion.position(x: w / 2, y: h / 2)) snapshotChildAnimations.append(Motion.position(x: w / 2, y: h / 2))
snapshotChildAnimations.append(sizeAnimation) snapshotChildAnimations.append(sizeAnimation)
let rotateAnimation = Motion.rotate(angle: getRotationInDegrees(view: toView)) snapshotAnimations.append(Motion.rotate(angle: getRotationInDegrees(view: toView)))
//rotateAnimation.fromValue = getRotationInDegrees(view: fromView)
snapshotAnimations.append(rotateAnimation)
let cornerRadiusAnimation = Motion.corner(radius: toView.cornerRadius) let cornerRadiusAnimation = Motion.corner(radius: toView.cornerRadius)
snapshotAnimations.append(cornerRadiusAnimation) snapshotAnimations.append(cornerRadiusAnimation)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment