jjzjj

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

coder 2024-01-24 原文

我想在所有其他 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/

有关iOS:创建另一个 UIWindow 作为覆盖时出现问题(iOS 7 问题?)的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  4. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  5. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  6. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  7. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  8. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  9. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  10. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

随机推荐