- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在所有其他 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;
但是,我遇到了一些问题:
[self.overlayWindow.rootViewController preferredStatusBarStyle]
正在设置状态栏文本颜色,而我实际上希望原始窗口的 Root View Controller 执行此操作。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/
我有 2 UIWindows , 当我同时显示 UIWindows最新显示UIWindow总是在显示的第一个之上 UIWindow .每个UIWindow是自己的UIWindow , 所以没有 Sub
我知道这看起来是个大问题,但事实并非如此,所以请不要害怕阅读它。主要是我在解释这些东西是如何工作的。 我有两个 UIWindow在我的应用程序中。第一个是应用程序默认创建的主窗口。第二个叫modalW
我们可以在 native mac 应用程序中使用 NSWindow 和 NSVisualEffectView 轻松创建这种效果,但是我们如何在为 MacCatalyst 构建的应用程序中实现呢? 当然
我已将 Objective-C 文件转换为 Swift,现在转换为: if isCaptured { let colourView = UIView(frame: window.frame)
我有一个 UIWindow 对象,我想将其显示在 Storyboard顶部。我是这样做的 - UIWindow *webWindow = [[UIWindow alloc] initWithFrame
我正在处理一个大约有 7/8 年历史的旧 Xcode 项目,我已将其迁移到 Objective-C 2.0 并支持 ARC。在我参与该项目之前,该项目不支持自动布局(这是在它发布之前)。我已经设法解决
我创建了一个正在加载的 UIWindow,当我开始加载时,我会调用它并 makeKeyAndVisible 。完成后,我 makeKeyAndVisible 我的主 UIWindow。但我的问题是,执
当发送keyboardWillShowNotification时,我可以通过向上移动系统键盘的窗口来将系统键盘移动到选项卡栏上方。然而,当 View Controller 嵌入到导航 Controll
尝试在 IOS 应用程序的关键 UIWindow 上添加一个覆盖窗口。但是,新的覆盖 UIWindow 似乎在任何地方都不可见。 不过,基于 lldb,它似乎已成功添加: (lldb) po UIAp
我有一个自定义的 UIWindow,它是我自己的状态栏,所以我想隐藏状态栏并显示我的状态栏。我有 override var prefersStatusBarHidden: Bool { ret
我有一个应用程序,其中有两个 UIWindow 实例的用例。第一个实例运行所有正常的应用程序交互,但我需要能够在没有用户交互的情况下,无论用户在应用程序中做什么,都能够在所有其他内容之上呈现一个 Vi
我在另一个 UIWIndow 上添加了一个新的 UIWIndow 以显示一个 View ,但它没有显示任何内容,而且屏幕变得有点模糊。这是代码: UIWindow* topWindow = [[UIW
我只是想继承 UIWindow 以便拦截一些通知。除了下面列出的代码,我还进入 MainWindow.xib 并将 UIWindow 对象更新到我的子类。它加载正常,问题是我的选项卡栏上的选项卡没有响
我总是看到对应用程序“窗口”的引用,而且我看到 AppDelegates 通常有一个名为“窗口”的 UIWindow 属性。所以我只是想知道如何感知这个 UIWindow 对象。我看到它是 UIVie
我正在向我的应用添加一个额外的 UIWindow。我的主窗口正确旋转,但我添加的这个附加窗口不旋转。 根据当前设备方向旋转 UIWindow 的最佳方法是什么? 最佳答案 您需要自己为 UIWindo
我认为这很容易,因为 [myWindow resignKeyWindow] 和 [self.window makeKeyAndVisible] 但我想不是……你们知道该怎么做吗? 谢谢:) 最佳答案
在我的应用程序中,我想在主 UIWindow 上创建一个新的 UIWindow,我写如下,但它不起作用。首先,我创建一个 UIWindow 作为主窗口,然后将其设置为键和可见,然后创建一个新的 UIW
我读过的每个视频教程和书籍都会显示以下代码,用于将 UIView 添加到 UIWindow。 [窗口addSubview:self.viewController.view]; 我对上面代码的理解是,将
我的应用程序中需要三个不同的部分:登录屏幕、主屏幕和横向模式下的屏幕,所有这些都完全不同。我看到苹果坚持认为应用程序应该有一个窗口,所以我想问:为此最好使用什么?三扇大 window ,还是风景?层次
我需要查看窗口上的触摸事件,因此我将 UIWindow 子类化以创建 MYWindow 类。我正在重写 sentEvent 函数来接收窗口上的触摸事件,所有这些都工作得很好。为了实现这一目标,我做了以
我是一名优秀的程序员,十分优秀!