草庐IT

ios - 将 UIView 或 UIViewController 置于所有其他之上

coder 2023-09-27 原文

我正在对 UIApplication 进行子类化,以在我的 TouchDisplay View 中拦截和显示触摸。我想扩展 Application、Window、Delegate 或 Main ViewController,以便让我的 TouchDisplay View 位于所有其他 View 之上。当我和大多数其他应用程序工作时, View 和 Controller 一直在添加和删除。我认为正确的答案将能够处理这些添加和删除,并且仍然将 TouchDisplay View 保持在顶部。

感谢您的帮助, 乔

最佳答案

您可以采用以下几种方法:

  1. 如果您只针对 iOS 5+ 和 iPad,您可以创建一个包含两个 View Controller 的顶级 View Controller 。第一个是“TouchDisplay” View 的 View Controller 。第二个是应用程序的普通 Root View Controller 。 (即您现有的主视图 Controller ;您需要在此 View Controller 上将 definesPresentationContext 设置为 YES)由于您正在编写容器 View Controller ,因此您可以根据需要对这两个 subview 进行排序。有一个WWDC 2011 Talk on view controller containment详细介绍了这一点。这是最“正确”的方法恕我直言,因为它为您的 TouchDisplay View 提供了一个 View Controller ,处理旋转并且通常与其他人一起玩得很好。 (这只适用于 iPad,因为在 iPhone 上新的模态视图总是覆盖整个屏幕。)

  2. 一种更直接的方法是使用 addSubview: 将您的 TouchView 作为 subview 简单地添加到您现有的顶级 UIWindow。大多数应用程序实际上并没有删除顶级 View Controller 或添加新的顶级 View Controller ;他们只是从中呈现其他 View Controller 。您在顶层窗口中添加的 View 将保留在这些 View 之上。当然,您的应用可能不遵循此规则,在这种情况下,您可以尝试选项 #3。这有旋转陷阱(设备旋转时您的 View 不会自动旋转,因此您需要自己执行此操作。)如果遇到问题,您也可以强制 View 回到顶部,例如,在 1 秒计时器上用其他东西覆盖它。这也不如选项 #1 好,因为您没有获得 UIViewController,只有 UIView。

  3. 最极端的方法是您可以创建另一个 UIWindow 并为其提供更高的窗口级别,例如 UIWindowLevelAlert 并将您的 TouchDisplay View 放在其中。然后您可以使窗口背景透明,它会保持在您的正常应用程序内容之上。这里有很多陷阱,尤其是关于自动旋转和哪个窗口是 keyWindow(这就是为什么你应该尽可能使用 #1 或 #2)。

关于ios - 将 UIView 或 UIViewController 置于所有其他之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248954/

有关ios - 将 UIView 或 UIViewController 置于所有其他之上的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  4. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  5. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  6. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  7. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  8. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  9. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  10. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

随机推荐