我正在对 UIApplication 进行子类化,以在我的 TouchDisplay View 中拦截和显示触摸。我想扩展 Application、Window、Delegate 或 Main ViewController,以便让我的 TouchDisplay View 位于所有其他 View 之上。当我和大多数其他应用程序工作时, View 和 Controller 一直在添加和删除。我认为正确的答案将能够处理这些添加和删除,并且仍然将 TouchDisplay View 保持在顶部。
感谢您的帮助, 乔
最佳答案
您可以采用以下几种方法:
如果您只针对 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 上新的模态视图总是覆盖整个屏幕。)
一种更直接的方法是使用 addSubview: 将您的 TouchView 作为 subview 简单地添加到您现有的顶级 UIWindow。大多数应用程序实际上并没有删除顶级 View Controller 或添加新的顶级 View Controller ;他们只是从中呈现其他 View Controller 。您在顶层窗口中添加的 View 将保留在这些 View 之上。当然,您的应用可能不遵循此规则,在这种情况下,您可以尝试选项 #3。这有旋转陷阱(设备旋转时您的 View 不会自动旋转,因此您需要自己执行此操作。)如果遇到问题,您也可以强制 View 回到顶部,例如,在 1 秒计时器上用其他东西覆盖它。这也不如选项 #1 好,因为您没有获得 UIViewController,只有 UIView。
最极端的方法是您可以创建另一个 UIWindow 并为其提供更高的窗口级别,例如 UIWindowLevelAlert 并将您的 TouchDisplay View 放在其中。然后您可以使窗口背景透明,它会保持在您的正常应用程序内容之上。这里有很多陷阱,尤其是关于自动旋转和哪个窗口是 keyWindow(这就是为什么你应该尽可能使用 #1 或 #2)。
关于ios - 将 UIView 或 UIViewController 置于所有其他之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248954/
我试图在一个项目中使用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时
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我试图获取一个长度在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
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下
我想获取模块中定义的所有常量的值: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
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我