草庐IT

iphone - iOS:在 NIB 之间自动旋转

coder 2024-01-22 原文

我的通用应用程序是一个全屏 View 。按下按钮会翻转以显示设置页面:

- (void) showSettings
{
FlipsideViewController * flipsideVC = [FlipsideViewController alloc];

NSString * settingsNib;
if ( isIPad() )
    settingsNib = isCurrentlyPortrait() ? @"settings_iPad_portrait" : @"settings_iPad_landscape";
else
     settingsNib = @"settings_iPhone";

[flipsideVC initWithNibName: settingsNib
                     bundle: nil ];

flipsideVC.delegatePointingToMainVC = self;

flipsideVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController: flipsideVC 
                        animated: YES ];

[flipsideVC release];
}

然后设置页面调用委托(delegate)方法:我根据更改的设置重新创建主视图,然后返回。

- (void) settingsDidQuit:(FlipsideViewController *) flipsideVC 
{
[self createOrRecreateWheelView];
[self dismissModalViewControllerAnimated: YES];
}

但是如果用户在设置页面旋转 iPad 怎么办? Apple 规定我的应用程序必须处理此问题。但如何做到这一点?我可以为设置页面动态加载新的 XIB 吗?

我看不到这样做的方法,所以我尝试的解决方案是在设置 View 中捕捉旋转,...

- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation 
{
[self.delegatePointingToMainVC settingsOrientationChanged]; 
}

...并回调到主视图 Controller ,它分解设置 View Controller 并根据当前方向重新创建它。

- (void) settingsOrientationChanged
{
[self dismissModalViewControllerAnimated: YES];
[self showSettings];
}

直接有一个小问题 -- didRotateFromInterfaceOrientation 在设置页面加载时自动触发。我可以通过在 init 中将 bool 值设置为 false 并进行如下修改来防止这种情况:

- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation 
{
if (initialized)
    [self.delegatePointingToMainVC settingsOrientationChanged]; 

initialized = true;
}

这种方法的问题是我导航到设置页面,旋转设备,然后它会暂时显示正确的设置页面,然后再返回我的主视图。

我认为这里存在线程问题。但也许我的整个方法是错误的。有人可以提出更好的解决方案吗?

最佳答案

我不确定我是否理解这个问题。您希望设置 View (从 NIB 加载)自动旋转吗?对于希望在 shouldAutorotateToInterfaceOrientation: 中执行自动旋转的方向,您应该只返回 YES,并根据您的需要在 XIB 中设置 View 的自动调整掩码。

没有必要回调主视图 Controller 并告诉他推送一个新的设置 View Controller 。 View 的旋转行为由每个 View 的自动调整掩码属性和相关 View Controller 的 shouldAutorotateToInterfaceOrientation: 方法的实现决定,仅此而已。不过,如果想要执行更高级的动画,您可以在 willRotateToInterfaceOrientation:duration:didRotateFromInterfaceOrientation: 方法中设置和管理它们。

关于iphone - iOS:在 NIB 之间自动旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793702/

有关iphone - iOS:在 NIB 之间自动旋转的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  5. 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返回它复制的字节数,但是当我还没有下

  6. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

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

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

  8. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  9. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  10. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

随机推荐