Objective-C - 当 iOS 13 暗模式更改时,以编程方式更改渐变背景颜色 UIViewController
Objective-C - Change programmatically Gradient Background Color UIViewController When iOS 13 Dark Mode changed
我正在我的应用程序中实施管理 iOS 13 的 暗模式的功能。我的 [=] 背景有问题36=].
我的视图控制器具有使用 CAGradientLayer
获得的背景渐变颜色。
当用户从 暗模式 ---> 亮模式 和 亮模式时,我设法根据用户的选择更改构成渐变的颜色模式 ---> 深色模式 ..
我的问题是,当用户在后台发送我的应用程序以转到控制中心并更改模式时,我用于背景颜色的渐变颜色不会立即更改...
要获得渐变颜色变化,用户必须关闭并重新打开应用程序。
一个非常糟糕的用户体验所以我想问你如何解决这个问题...
这是我用来根据用户选择的 iOS
模式更改渐变颜色的方法
- (void)viewDidLoad {
[super viewDidLoad];
[self setupBackground];
}
- (void)setupBackground {
UIColor *secondaryColor = self.view.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ? UIColor.customRedColor : UIColor.customGreenColor;
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = UIApplication.sharedApplication.windows.firstObject.bounds;
gradient.colors = @[(id)UIColor.customBlueColor.CGColor, (id)secondaryColor.CGColor];
gradient.locations = @[@0.1, @0.9];
[self.view.layer insertSublayer:gradient atIndex:0];
}
您应该实施 traitCollectionDidChange
并让它更新您的背景:
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if (@available(iOS 13.0, *)) { // Needed if your app supports iOS 12
if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
[self setupBackground];
}
}
}
当然这意味着setupBackground
会被调用很多次。所以你应该更新它,这样它就不会每次都添加一个新层。
kAiN,
在 iOS13 上使用 ObjC 实现暗模式有很多困难,但幸运的是,一组开发人员和设计师提供了一种非常简单的方法:
https://medium.com/flawless-app-stories/implementing-dark-mode-on-ios-d195cac098de
此致。 o/
我正在我的应用程序中实施管理 iOS 13 的 暗模式的功能。我的 [=] 背景有问题36=].
我的视图控制器具有使用 CAGradientLayer
获得的背景渐变颜色。
当用户从 暗模式 ---> 亮模式 和 亮模式时,我设法根据用户的选择更改构成渐变的颜色模式 ---> 深色模式 ..
我的问题是,当用户在后台发送我的应用程序以转到控制中心并更改模式时,我用于背景颜色的渐变颜色不会立即更改...
要获得渐变颜色变化,用户必须关闭并重新打开应用程序。
一个非常糟糕的用户体验所以我想问你如何解决这个问题...
这是我用来根据用户选择的 iOS
模式更改渐变颜色的方法
- (void)viewDidLoad {
[super viewDidLoad];
[self setupBackground];
}
- (void)setupBackground {
UIColor *secondaryColor = self.view.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ? UIColor.customRedColor : UIColor.customGreenColor;
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = UIApplication.sharedApplication.windows.firstObject.bounds;
gradient.colors = @[(id)UIColor.customBlueColor.CGColor, (id)secondaryColor.CGColor];
gradient.locations = @[@0.1, @0.9];
[self.view.layer insertSublayer:gradient atIndex:0];
}
您应该实施 traitCollectionDidChange
并让它更新您的背景:
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if (@available(iOS 13.0, *)) { // Needed if your app supports iOS 12
if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
[self setupBackground];
}
}
}
当然这意味着setupBackground
会被调用很多次。所以你应该更新它,这样它就不会每次都添加一个新层。
kAiN,
在 iOS13 上使用 ObjC 实现暗模式有很多困难,但幸运的是,一组开发人员和设计师提供了一种非常简单的方法:
https://medium.com/flawless-app-stories/implementing-dark-mode-on-ios-d195cac098de
此致。 o/