BDPAppearanceManager.h
4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//
// BDPAppearanceManager.h
// BDPAppearancer
//
// Created by hulinling on 2019/7/25.
// Copyright © 2019 baidu. All rights reserved.
//
#import <UIKit/UIKit.h>
/// 当APP所应用的主题发生变更时,将会发送该通知(若有场景需要进行自定义的操作,可监听该通知,比如:有drawRect的场景;通常不需要监听该通知)
/// @note 不要在接受该通知时,做耗时操作
UIKIT_EXTERN NSString * const BDPAppearanceRefreshUINotification;
/// 当主题切换动画完成时,将会发送该通知
UIKIT_EXTERN NSString * const BDPAppearanceRefreshAnimationFinishNotification;
/// 当发送BDPAppearanceRefreshUINotification、BDPAppearanceRefreshAnimationFinishNotification通知,其中userinfo中存放的是切换前的主题key
UIKIT_EXTERN NSString * const BDPAppearanceRefreshUIUserInfoPreMode;
/// 当发送BDPAppearanceRefreshUINotification、BDPAppearanceRefreshAnimationFinishNotification通知,其中userinfo中存放的切换前的statusBarStyle(值为数字,follow枚举UIStatusBarStyle的定义)
UIKIT_EXTERN NSString * const BDPAppearanceRefreshUIUserInfoPreStatusBarStyle;
/// 深色主题
UIKIT_EXTERN NSString * const BDPAppearanceDarkMode;
/// 默认主题
UIKIT_EXTERN NSString * const BDPAppearanceDefaultMode;
@interface BDPAppearanceManager : NSObject
/// 当前正在使用的主题
@property (nonatomic, readonly) NSString *currentAppearanceMode;
/// 当前主题是否是默认主题
@property (nonatomic, readonly) BOOL isDefaultMode;
/// 当前系统正在使用的主题(iOS13+ 才有值,反之,则为nil)
@property (nonatomic, readonly) NSString *currentSystemAppearanceMode;
/// 是否自动跟随系统主题,设置该属性时,须在主线程中进行;若开启自动跟随,且系统主题跟当前APP的主题不一致时,将自动切换到对应主题
@property (nonatomic, assign) BOOL autoFollowSystemAppearance;
/// 是否根据当前主题模式,控制应用内系统主题模式,默认为YES;(仅 iOS13+的系统才生效)
@property (nonatomic, assign) BOOL controlSystemAppearance;
+ (instancetype)sharedInstance;
/// 配置主题本地存储路径:此方法也可直接初始化主题(若 没有调用 `setupWithAppearanceBundleName`方法配置预置主题资源的话,则用此方法初始化必须保证此路径下有资源色值,该方法的调用只生效一次)
/// 目录的要求: xxx为主路径只需将主路径传进来即可,主路径下的资源路径需要严格按照以下格式
/// - xxx
/// - default
/// -default.plist
/// - dark
/// -dark.plist
/// - xxxMode
/// -xxxMode.plist
/// @param dir 主题本地存储目录(使用方需保证该目录是存在的,否则将不生效)
- (void)setupWithAppearanceDir:(NSString *)dir;
/// 主题 用预置Bundle中的资源进行初始化(预置Bundle里边的目录结构严格按照以下规则,该方法的调用只生效一次)
/// 此方法仅支持预置的资源路径
/// - xxx.bundle
/// - default
/// -default.plist
/// - dark
/// -dark.plist
/// @param bundleName 预置的资源bundleName
- (void)setupWithAppearanceBundleName:(NSString *)bundleName;
/// 切换到指定到主题,需在主线程中执行(切换后,将自动刷新已适配的所有组件的色值、图片为对应主题下的色值、图片)
/// @param appearance 目标主题(若为空,或者找不到对应主题,则忽略当次切换)
- (void)changeToAppearance:(NSString *)appearance;
/// 切换到指定到主题,需在主线程中执行(切换后,将自动刷新已适配的所有组件的色值、图片为对应主题下的色值、图片)
/// @param appearance 目标主题(若为空,或者找不到对应主题,则忽略当次切换)
/// @param impactFeedback 是否需要震动反馈(仅 iOS10+的系统才生效)
- (void)changeToAppearance:(NSString *)appearance needImpactFeedback:(BOOL)impactFeedback;
/// 切换statusBarStyle到匹配当前主题下的正确style
/// @param animated 切换时是否需要动画
- (void)changeStatusBarStyleToCurrentAppearace:(BOOL)animated;
@end