143 lines
4.7 KiB
Swift
143 lines
4.7 KiB
Swift
//
|
|
// Styler.swift
|
|
// MVMCoreUI
|
|
//
|
|
// Created by Kevin Christiano on 4/1/20.
|
|
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
|
|
open class Styler {
|
|
//--------------------------------------------------
|
|
// MARK: - Enums
|
|
//--------------------------------------------------
|
|
|
|
public enum Font: String {
|
|
case Title2XLarge
|
|
case TitleXLarge
|
|
case BoldTitleLarge
|
|
case RegularTitleLarge
|
|
case BoldTitleMedium
|
|
case RegularTitleMedium
|
|
case BoldBodyLarge
|
|
case RegularBodyLarge
|
|
case BoldBodySmall
|
|
case RegularBodySmall
|
|
case BoldMicro
|
|
case RegularMicro
|
|
|
|
public func pointSize() -> CGFloat {
|
|
switch self {
|
|
case .Title2XLarge:
|
|
return 36
|
|
|
|
case .TitleXLarge:
|
|
return 32
|
|
|
|
case .BoldTitleLarge,
|
|
.RegularTitleLarge:
|
|
return 24
|
|
|
|
case .BoldTitleMedium,
|
|
.RegularTitleMedium:
|
|
return 20
|
|
|
|
case .BoldBodyLarge,
|
|
.RegularBodyLarge:
|
|
return 16
|
|
|
|
case .BoldBodySmall,
|
|
.RegularBodySmall:
|
|
return 13
|
|
|
|
case .BoldMicro, .RegularMicro:
|
|
return 11
|
|
}
|
|
}
|
|
|
|
public func isBold() -> Bool {
|
|
|
|
switch self {
|
|
case .Title2XLarge,
|
|
.TitleXLarge,
|
|
.RegularTitleLarge,
|
|
.RegularTitleMedium,
|
|
.RegularBodyLarge,
|
|
.RegularBodySmall,
|
|
.RegularMicro:
|
|
return false
|
|
|
|
case .BoldTitleLarge,
|
|
.BoldTitleMedium,
|
|
.BoldBodyLarge,
|
|
.BoldBodySmall,
|
|
.BoldMicro:
|
|
return true
|
|
}
|
|
}
|
|
|
|
public func getFont(_ genericScaling: Bool = true) -> UIFont? {
|
|
|
|
let size = genericScaling ? sizeFontGeneric(forCurrentDevice: pointSize()) : pointSize()
|
|
return getMVA3FontSize(size, isBold: isBold())
|
|
}
|
|
|
|
public func styleLabel(_ label: UILabel, genericScaling: Bool = true) {
|
|
|
|
label.font = getFont(genericScaling)
|
|
label.textColor = .black
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Functions
|
|
//--------------------------------------------------
|
|
|
|
open class func sizeObjectGeneric(forCurrentDevice size: CGFloat) -> MFSizeObject? {
|
|
|
|
let sizeObject = MFSizeObject(standardSize: size, standardiPadPortraitSize: size * 1.3)
|
|
sizeObject?.addLargerThanCustomSize(size * 1.4, forThreshold: MFSizeStandardiPadLandscapeThreshold)
|
|
sizeObject?.addLargerThanCustomSize(size * 1.5, forThreshold: MFSizeiPadProLandscapeThreshold)
|
|
return sizeObject
|
|
}
|
|
|
|
open class func sizeFontGeneric(forCurrentDevice size: CGFloat) -> CGFloat {
|
|
return sizeObjectGeneric(forCurrentDevice: size)?.getValueBasedOnApplicationWidth() ?? 0
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Spacing
|
|
//--------------------------------------------------
|
|
|
|
open class func setDefaultMarginsFor(_ view: UIView?, size: CGFloat, horizontal: Bool = true, vertical: Bool = false) {
|
|
|
|
let horizontalPadding: CGFloat = horizontal ? Padding.Default.horizontalPadding(forSize: size) : 0
|
|
let verticalPadding: CGFloat = vertical ? PaddingDefaultVerticalSpacing3 : 0
|
|
|
|
DispatchQueue.main.async {
|
|
MVMCoreUIUtility.setMarginsFor(view, leading: horizontalPadding, top: verticalPadding, trailing: horizontalPadding, bottom: verticalPadding)
|
|
}
|
|
}
|
|
|
|
open class func setMarginsFor(_ view: UIView?, size: CGFloat, defaultHorizontal horizontal: Bool, top: CGFloat, bottom: CGFloat) {
|
|
|
|
let horizontalPadding: CGFloat = horizontal ? Padding.Default.horizontalPadding(forSize: size) : 0
|
|
|
|
DispatchQueue.main.async {
|
|
MVMCoreUIUtility.setMarginsFor(view, leading: horizontalPadding, top: top, trailing: horizontalPadding, bottom: bottom)
|
|
}
|
|
}
|
|
|
|
open class func getMVA3FontSize(_ size: CGFloat, isBold: Bool) -> UIFont {
|
|
|
|
if isBold {
|
|
return size >= 15 ? MFFonts.mfFontDSBold(size) : MFFonts.mfFontTXBold(size)
|
|
|
|
} else {
|
|
return size >= 15 ? MFFonts.mfFontDSRegular(size) : MFFonts.mfFontTXRegular(size)
|
|
}
|
|
}
|
|
}
|