AnimatorFactory.swift 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //
  2. // Created by Jake Lin on 2/24/16.
  3. // Copyright © 2016 IBAnimatable. All rights reserved.
  4. //
  5. import UIKit
  6. /**
  7. Animator Factory
  8. */
  9. public struct AnimatorFactory {
  10. public static func makeAnimator(transitionAnimationType: TransitionAnimationType,
  11. transitionDuration: Duration = defaultTransitionDuration) -> AnimatedTransitioning? {
  12. switch transitionAnimationType {
  13. case .systemRotate:
  14. return SystemTransitionAnimator(systemType: .rotate, duration: transitionDuration)
  15. case .systemSuckEffect:
  16. return SystemTransitionAnimator(systemType: .suckEffect, duration: transitionDuration)
  17. case .systemRippleEffect:
  18. return SystemTransitionAnimator(systemType: .rippleEffect, duration: transitionDuration)
  19. case let .explode(xFactor, minAngle, maxAngle):
  20. return ExplodeAnimator(xFactor: xFactor, minAngle: minAngle, maxAngle: maxAngle, duration: transitionDuration)
  21. case let .fade(direction):
  22. return FadeAnimator(direction: direction, duration: transitionDuration)
  23. case let .fold(direction, folds):
  24. return FoldAnimator(from: direction, folds: folds, duration: transitionDuration)
  25. case let .portal(direction, zoomScale):
  26. return PortalAnimator(from: direction, zoomScale: zoomScale, duration: transitionDuration)
  27. case let .natGeo(direction):
  28. return NatGeoAnimator(from: direction, duration: transitionDuration)
  29. case let .turn(direction):
  30. return TurnAnimator(from: direction, duration: transitionDuration)
  31. case let .cards(direction):
  32. return CardsAnimator(from: direction, duration: transitionDuration)
  33. case let .flip(direction):
  34. return FlipAnimator(from: direction, duration: transitionDuration)
  35. case let .slide(direction, isFade):
  36. return SlideAnimator(from: direction, isFade: isFade, duration: transitionDuration)
  37. case let .systemCube(direction):
  38. return SystemTransitionAnimator(systemType: .cube, duration: transitionDuration, direction: direction)
  39. case let .systemFlip(direction):
  40. return SystemTransitionAnimator(systemType: .flip, duration: transitionDuration, direction: direction)
  41. case let .systemMoveIn(direction):
  42. return SystemTransitionAnimator(systemType: .moveIn, duration: transitionDuration, direction: direction)
  43. case let .systemPush(direction):
  44. return SystemTransitionAnimator(systemType: .push, duration: transitionDuration, direction: direction)
  45. case let .systemReveal(direction):
  46. return SystemTransitionAnimator(systemType: .reveal, duration: transitionDuration, direction: direction)
  47. case let .systemPage(type):
  48. return SystemTransitionAnimator(systemType: TransitionAnimationType.SystemTransitionType(pageType: type), duration: transitionDuration)
  49. case let .systemCameraIris(hollowState):
  50. return SystemTransitionAnimator(systemType: TransitionAnimationType.SystemTransitionType(hollowState: hollowState), duration: transitionDuration)
  51. default:
  52. return nil
  53. }
  54. }
  55. public static func makeAnimator(presentationAnimationType: PresentationAnimationType,
  56. transitionDuration: Duration = defaultPresentationDuration) -> AnimatedPresenting {
  57. switch presentationAnimationType {
  58. case let .cover(direction):
  59. return CoverAnimator(from: direction, duration: transitionDuration)
  60. case .zoom:
  61. return ZoomAnimator(duration: transitionDuration)
  62. case .dropDown:
  63. return DropDownAnimator(duration: transitionDuration)
  64. case .flip, .crossDissolve:
  65. fatalError("System animation, will never be executed")
  66. }
  67. }
  68. }