gpt4 book ai didi

iOS:创建另一个 UIWindow 作为覆盖时出现问题(iOS 7 问题?)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:22:16 26 4
gpt4 key购买 nike

我想在所有其他 View (包括键盘)之上创建一个覆盖 View ,创建另一个 UIWindow 似乎是实现此目的的方法。看完the Windows section of the View Programming Guide和一些在线的其他文档,看来我只需要...

  • 创建具有屏幕边界的窗口,
  • 将其windowLevel设置为UIWindowLevelStatusBar,
  • userInteractionEnabled 设置为 NO(因此它会忽略触摸),
  • 并通过将其 hidden 属性设置为 NO 使其可见(不使其成为关键窗口,因此它不会接收非触摸事件)。

这是我的应用委托(delegate)中的代码:

self.overlayWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.overlayWindow.backgroundColor = [UIColor clearColor];
self.overlayWindow.windowLevel = UIWindowLevelStatusBar;
self.overlayWindow.userInteractionEnabled = NO;
self.overlayWindow.rootViewController = [[OverlayViewController alloc] initWithNibName:nil bundle:nil];
self.overlayWindow.hidden = NO;

但是,我遇到了一些问题:

  1. [self.overlayWindow.rootViewController preferredStatusBarStyle] 正在设置状态栏文本颜色,而我实际上希望原始窗口的 Root View Controller 执行此操作。
  2. 一个大问题是额外的窗口不知何故打乱了我对软件键盘通知的处理。似乎我仍然收到通知,但我的应用程序在某些情况下响应异常。 (我不会解释这些奇怪的行为是什么,因为它们离题了。)关键是我根本不应该得到这些奇怪的行为:我只是想在应用程序上绘制一个覆盖层,而应用应该像以前一样运行。
  3. 我希望 overlayWindow 的旋转与原始窗口的旋转相匹配,但它是独立旋转的。例如,UINavigationController 的滑动返回手势锁定了界面方向,但 overlayWindow 在此期间仍然可以旋转。

我应该怎么做才能解决这个问题,这样我就可以在应用程序上获得一个无害的覆盖层?

最佳答案

我已经完成了与使用窗口非常相似的事情。在我的例子中,我没有使用附加到窗口的 UIViewController,只是使用了所需的 subview ,所以它看起来是正确的。为了正确处理旋转,您可以收听 NSNotification

UIApplicationDidChangeStatusBarOrientationNotification

在方法处理程序中,您可以通过这样的调用获取设备方向

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

然后您可以使用 CGAffineTransformMakeRotation 将窗口内的 View 旋转到正确的方向。从方法的外观来看,您会认为您会在设备方向设置动画后收到通知,但是您会在使用变换旋转 View 之前和时收到通知,您的旋转将与其他所有内容一起设置动画(这是假设事情是集中的,如果没有事情会更复杂)。如果你想要一个例子,SVProgress hud 将是一个很好的学习例子 https://github.com/samvermette/SVProgressHUD

关于iOS:创建另一个 UIWindow 作为覆盖时出现问题(iOS 7 问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689847/

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