mtpThemeManager 1.0.7

mtpThemeManager 1.0.7

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新版本2019年4月
SPM支持 SPM

mtpFontManager维护。




  • 作者:
  • Mostafa Taghipour

mtpThemeManager

CI Status Version License Platform

Android 版本在此

mtpThemeManger 是 iOS 的主题管理器

  • 应用到整个应用的主题
  • 支持多种主题
  • 支持夜间模式
  • 支持样式
  • 完全可定制

要求

  • iOS 9.0+
  • Xcode 9+

安装

mtpThemeManager 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod 'mtpThemeManager'

使用方法

  1. 导入mtpThemeManager
  2. 定义一个遵守Theme协议的类
class RedTheme:Theme {
    required  init() {}
    var id: Int=1
    var displayName: String="Red"
    var tintColor: UIColor = .red
}
  1. 像这样在AppDelegate中应用你的主题
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    ThemeManager.shared.setTheme(theme: RedTheme())

    return true
}

这样就完成了,现在运行你的应用并享受它吧

夜间模式

要应用夜间模式,你必须遵守DayNightTheme协议

class RedTheme:DayNightTheme {
    required  init() {}
    var id: Int=1
    var displayName: String="Red"
    var tintColor: UIColor = .red
}

然后像这样应用你的主题

ThemeManager.shared.setTheme(dayNight: RedTheme(), nightModeStatus: .enable)

ThemeManager.shared.setTheme(dayNight: RedTheme())
ThemeManager.shared.nightModelStatus = .enable

自定义

你可以自定义整个主题,例如要自定义状态栏,只需在主题中覆写statusBarStyle变量

class RedTheme:Theme {
    required  init() {}
    var id: Int=1
    var displayName: String="Red"
    var tintColor: UIColor = .red

    // you can override styles in your theme
    var statusBarStyle: StatusBarStyle=StatusBarStyle(backgroundColor: .red, style: .lightContent)
}

所有主题属性的列表

  • var id:Int{get}
  • var displayName:String{get}
  • var tintColor:UIColor{get}
  • var primaryTextColor:UIColor{get}
  • var backgroundColor:UIColor{get}
  • var navigationBarStyle:NavigationBarStyle{get}
  • var tabBarStyle:TabBarStyle{get}
  • var toolbarStyle:ToolbarStyle{get}
  • var searchBarStyle:SearchBarStyle{get}
  • var statusBarStyle:StatusBarStyle{get}
  • var keyboardStyle:KeyboardStyle{get}
  • var buttonStyle:ButtonStyle{get}
  • var textFieldStyle:TextFieldStyle{get}
  • var textViewStyle:TextViewStyle{get}
  • var activityIndicatorViewStyle : ActivityIndicatorViewStyle {get}
  • var scrollViewStyle:ScrollViewStyle{get}
  • var segmentedControlStyle:SegmentedControlStyle{get}
  • var stepperStyle:StepperStyle{get}
  • var pageControlStyle:PageControlStyle{get}
  • var progressViewStyle:ProgressViewStyle{get}
  • var sliderStyle:SliderStyle{get}
  • var switchStyle:SwitchStyle{get}

除了上述属性外,DayNightTheme还包含以下属性

  • var tintColorNight:UIColor{get}
  • var primaryTextColorNight:UIColor{get}
  • var backgroundColorNight:UIColor{get}
  • var navigationBarStyleNight:NavigationBarStyle{get}
  • var tabBarStyleNight:TabBarStyle{get}
  • var toolbarStyleNight:ToolbarStyle{get}
  • var searchBarStyleNight:SearchBarStyle{get}
  • var statusBarStyleNight:StatusBarStyle{get}
  • var keyboardStyleNight:KeyboardStyle{get}
  • var buttonStyleNight:ButtonStyle{get}
  • var textFieldStyleNight:TextFieldStyle{get}
  • var textViewStyleNight:TextViewStyle{get}
  • var activityIndicatorViewStyleNight : ActivityIndicatorViewStyle {get}
  • var scrollViewStyleNight:ScrollViewStyle{get}
  • var segmentedControlStyleNight:SegmentedControlStyle{get}
  • var stepperStyleNight:StepperStyle{get}
  • var pageControlStyleNight:PageControlStyle{get}
  • var progressViewStyleNight:ProgressViewStyle{get}
  • var sliderStyleNight:SliderStyle{get}
  • var switchStyleNight:SwitchStyle{get}

样式

mtpThemeManager 的一个功能是样式,您可以定义样式并在需要的地方使用它们,例如我定义了两个按钮样式并使用它们

let roundButtonStyle=ButtonStyle(tintColor: .orange, borderColor: .orange, borderWidth: 2, cornerRadius: 9)
let riseduttonStyle=ButtonStyle(backgroundColor: UIColor.init(red: 90/255, green: 200/255, blue: 250/255, alpha: 1) , tintColor: .white)

override func viewDidLoad() {
    super.viewDidLoad()

    button1.setStyle(style: roundButtonStyle)
    button2.setStyle(style: roundButtonStyle)
    button3.setStyle(style: roundButtonStyle)
    button4.setStyle(style: riseduttonStyle)

}

所有样式列表

  • StatusBarStyle
  • NavigationBarStyle
  • TabBarStyle
  • ToolbarStyle
  • SearchBarStyle
  • TextFieldStyle
  • TextViewStyle
  • ButtonStyle
  • ActivityIndicatorViewStyle
  • ScrollViewStyle
  • SegmentedControlStyle
  • StepperStyle
  • PageControlStyle
  • ProgressViewStyle
  • SliderStyle
  • SwitchStyle
  • KeyboardStyle

当前主题属性

您可以访问当前主题属性,如当前色调颜色等

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.tintColor = .white
    // apply current themeColor to navigation bar barTintColor
    self.navigationController?.navigationBar.barTintColor = ThemeManager.shared.tintColor

}

所有当前主题属性列表

  • public var tintColor:UIColor?
  • public var backgroundColor:UIColor?
  • public var primaryTextColor:UIColor?
  • public var navigationBarStyle:NavigationBarStyle?
  • public var tabBarStyle:TabBarStyle
  • public var toolbarStyle:ToolbarStyle?
  • public var searchBarStyle:SearchBarStyle?
  • public var statusBarStyle:StatusBarStyle?
  • public var buttonStyles:ButtonStyle?
  • public var textFieldStyle:TextFieldStyle?
  • public var textViewStyle:TextViewStyle?
  • public var keyboardStyle:KeyboardStyle?
  • public var activityIndicatorViewStyle:ActivityIndicatorViewStyle?
  • public var switchStyle:SwitchStyle?
  • public var sliderStyle:SliderStyle?
  • public var progressViewStyle:ProgressViewStyle?
  • public var pageControlStyle:PageControlStyle?
  • public var stepperStyle:StepperStyle?
  • public var segmentedControlStyle:SegmentedControlStyle?
  • public var scrollViewStyle:ScrollViewStyle?

通知

当主题改变时发出一条通知。

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(themeDidChanged(notification:)), name: NSNotification.Name.ThemeDidChange, object: nil)

}


@objc func themeDidChanged(notification:Notification)  {
    if let theme=notification.object as? Theme{
        print(theme.displayName)
    }
}

示例

要运行示例项目,请先克隆仓库,然后在示例目录中运行pod install

作者

Mostafa Taghipour, [email protected]

许可证

mtpThemeManager遵循MIT许可证。更多详情请参阅LICENSE文件。