目标C-更改iOS 13暗模式时以编程方式渐变背景色UIViewController

问题描述 投票:0回答:1

大家好,我正在我的应用程序中实现iOS 13的黑暗模式的管理功能。我的ViewController的背景有问题。

我的视图控制器具有通过CAGradientLayer获得的背景渐变颜色。

当[ Light Mode和Light Mode ---> Dark Mode] ..时,我根据用户的选择设法改变了组成渐变的颜色。 >我的问题是,当用户在后台发送我的应用程序以进入控制中心并更改模式时,我用于背景颜色的渐变颜色不会立即更改...

要更改渐变颜色,用户必须关闭应用程序然后重新打开。

一个非常糟糕的用户体验,所以我想问你如何解决这个问题...

这是我根据用户选择的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]; }

[大家好,我正在我的应用程序中实现用于管理iOS 13暗模式的功能。我的ViewController的背景出现问题。我的视图控制器具有背景...
ios objective-c uiviewcontroller uicolor ios-darkmode
1个回答
1
投票
您应实施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]; } } }

© www.soinside.com 2019 - 2024. All rights reserved.