PresentationModalPosition.swift 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // Created by Tom Baranes on 17/07/16.
  3. // Copyright © 2016 Jake Lin. All rights reserved.
  4. //
  5. import UIKit
  6. public enum PresentationModalPosition: IBEnum {
  7. case center
  8. case topCenter
  9. case bottomCenter
  10. case leftCenter
  11. case rightCenter
  12. case customCenter(centerPoint: CGPoint)
  13. case customOrigin(origin: CGPoint)
  14. func modalCenter(in containerFrame: CGRect, modalSize: CGSize) -> CGPoint? {
  15. let xCenter = containerFrame.origin.x + (containerFrame.width / 2)
  16. let yCenter = containerFrame.origin.y + (containerFrame.height / 2)
  17. switch self {
  18. case .center:
  19. return CGPoint(x: xCenter, y: yCenter)
  20. case .topCenter:
  21. return CGPoint(x: xCenter, y: containerFrame.minY + (modalSize.height / 2))
  22. case .bottomCenter:
  23. return CGPoint(x: xCenter, y: containerFrame.maxY - (modalSize.height / 2))
  24. case .leftCenter:
  25. return CGPoint(x: containerFrame.minX + (modalSize.width / 2), y: yCenter)
  26. case .rightCenter:
  27. return CGPoint(x: containerFrame.maxX - (modalSize.width / 2), y: yCenter)
  28. case let .customCenter(point):
  29. return point
  30. case .customOrigin:
  31. return nil
  32. }
  33. }
  34. func calculateOrigin() -> CGPoint? {
  35. switch self {
  36. case let .customOrigin(origin):
  37. return origin
  38. default:
  39. return nil
  40. }
  41. }
  42. }
  43. public extension PresentationModalPosition {
  44. /**
  45. Initializes a swift `PresentationModalPosition` with provided optional string
  46. - Parameter string: The optional string to be converted into `PresnetationModalPosition`.
  47. */
  48. init(string: String?) {
  49. guard let string = string else {
  50. self = .center
  51. return
  52. }
  53. let (name, params) = MaskType.extractNameAndParams(from: string)
  54. let point = CGPoint(x: params[safe: 0]?.toDouble() ?? 0, y: params[safe: 1]?.toDouble() ?? 0)
  55. switch name {
  56. case "center":
  57. self = .center
  58. case "topcenter":
  59. self = .topCenter
  60. case "bottomcenter":
  61. self = .bottomCenter
  62. case "leftcenter":
  63. self = .leftCenter
  64. case "rightcenter":
  65. self = .rightCenter
  66. case "customcenter" where params.count > 2:
  67. self = .customCenter(centerPoint: point)
  68. case "customorigin" where params.count > 2:
  69. self = .customOrigin(origin: point)
  70. default:
  71. self = .center
  72. }
  73. }
  74. }