gpt4 book ai didi

iphone - 设备旋转时更改 UIWindow 背景颜色

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:09 24 4
gpt4 key购买 nike

我的 UIWindow 最初有一个白色背景。我想在设备旋转时将背景更改为蓝色(永久)。但实际发生的是颜色短暂闪烁蓝色然后变回白色。

在应用委托(delegate)中:

- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{
self.window.backgroundColor = [UIColor blueColor];
}

这段代码按预期被调用,但是当旋转完成时,-[UIWindow setBackgroundColor:] 被第二次调用(正如我通过子类化 UIWindow 发现的那样)。第二次调用的调用栈是:

-[UIWindow setBackgroundColor]
-[UIWindow _finishedFullRotation:finished:context:]
-[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
-[UIViewAnimationState animationDidStop:finished:]
-run_animation_callbacks
...

编辑(@VinceBurn 的回答)

应用程序只有一个 View (来自 Xcode 的基于 View 的应用程序项目模板)。我现在已经将 View 的背景颜色(在 IB 中)设置为 0% 不透明度。仍然得到相同的结果。

为了确保白色不是来自其他一些默认颜色设置,我现在最初将窗口的背景颜色设置为绿色:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

// Add the view controller's view to the window and display.
self.window.backgroundColor = [UIColor greenColor];
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];

return YES;
}

当它旋转时,它会短暂闪烁蓝色,然后恢复为绿色。

最佳答案

我最终做的是更改事件 UIViewController View 的背景颜色,而不是 UIWindow:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
self.view.backgroundColor = [UIColor blueColor];
}

我一直试图设置 UIWindow 背景颜色的原因是为了在整个应用程序中获得相同的背景颜色。显然,实现这一点的最简单方法是让应用程序中的所有 UIViewController 继承自实现 -didRotateFromInterfaceOrientation:UIViewController 子类。

关于iphone - 设备旋转时更改 UIWindow 背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com