123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- //
- // Created by Tom Baranes on 17/07/16.
- // Copyright © 2016 Jake Lin. All rights reserved.
- //
- import UIKit
- public enum PresentationModalSize: IBEnum {
- case half
- case full
- case third
- case quarter
- case fifth
- case sixth
- case seventh
- case eighth
- case threeQuarters
- case twoThirds
- case goldenSmall
- case goldenLarge
- case custom(size: Float)
- case preferred
- func width(parentSize: CGSize) -> Float {
- return size(for: Float(parentSize.width))
- }
- func height(parentSize: CGSize) -> Float {
- return size(for: Float(parentSize.height))
- }
- public static let `default`: PresentationModalSize = .half
- private func size(for value: Float) -> Float {
- switch self {
- case .half:
- return floorf(value / 2.0)
- case .full:
- return value
- case .third:
- return floorf(value / 3.0)
- case .quarter:
- return floorf(value / 4.0)
- case .fifth:
- return floorf(value / 5.0)
- case .sixth:
- return floorf(value / 6.0)
- case .seventh:
- return floorf(value / 7.0)
- case .eighth:
- return floorf(value / 8.0)
- case .threeQuarters:
- return floorf(3.0 * value / 4.0)
- case .twoThirds:
- return floorf(2.0 * value / 3.0)
- case .goldenSmall:
- return floorf(value - value / goldenRatio)
- case .goldenLarge:
- return floorf(value / goldenRatio)
- case .custom(let size):
- return size
- case .preferred:
- return PresentationModalSize.default.size(for: value)
- }
- }
- }
- private let goldenRatio: Float = (1.0 + CoreFoundation.sqrt(5.0)) / 2.0
- public extension PresentationModalSize {
- init?(string: String?) {
- guard let string = string else {
- return nil
- }
- let (name, params) = PresentationModalSize.extractNameAndParams(from: string)
- switch name {
- case "half":
- self = .half
- case "full":
- self = .full
- case "third":
- self = .third
- case "quarter":
- self = .quarter
- case "fifth":
- self = .fifth
- case "sixth":
- self = .sixth
- case "seventh":
- self = .seventh
- case "eighth":
- self = .eighth
- case "threequarters":
- self = .threeQuarters
- case "twothirds":
- self = .twoThirds
- case "goldensmall":
- self = .goldenSmall
- case "goldenlarge", "goldenratio":
- self = .goldenLarge
- case "custom" where params.count == 1:
- self = .custom(size: params[0].toFloat() ?? 0)
- case "preferred":
- self = .preferred
- default:
- return nil
- }
- }
- }
|