使用一个 UIViewController 和两个 XIB 处理 iPad 上的方向变化

2023-12-23

我想用一个 UIViewController 和两个 XIB(例如 MenuView 和 MenuViewLandscape)来处理 iPad 应用程序上的方向更改。

那么,在 MenuViewController 的 willRotateToInterfaceOrientation 方法中,如何在不使用横向模式的另一个控制器的情况下更改 XIB?

我正在使用以下代码:

if( toInterfaceOrientation != UIInterfaceOrientationPortrait ){
    MenuViewController *landscape = [[MenuViewController alloc] 
                                        initWithNibName: @"MenuViewLandscape"
                                        bundle:nil 
                                    ];        
    [self setView:landscape.view];
}
else {
    MenuViewController *potrait = [[MenuViewController alloc] 
                                     initWithNibName: @"MenuView"
                                     bundle:nil 
                                  ];        
    [self setView:potrait.view];
}

但是当我进入横向视图 XIB 时,横向视图控件未正确旋转。


我不确定这个实现是否有任何奇怪的副作用,但尝试这样的方法,看看它是否适合您:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
    if (UIInterfaceOrientationIsPortrait(orientation)) {
        [[NSBundle mainBundle] loadNibNamed:@"MenuView" owner:self options:nil];
        if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
            self.view.transform = CGAffineTransformMakeRotation(M_PI);
        }
    } else if (UIInterfaceOrientationIsLandscape(orientation)){
        [[NSBundle mainBundle] loadNibNamed:@"MenuViewLandscape" owner:self options:nil];
        if (orientation == UIInterfaceOrientationLandscapeLeft) {
            self.view.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2);
        } else {
            self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
        }
    }
}

假设 MenuView 和 MenuViewLandscape XIB 中的文件所有者都设置为 MenuViewController,并且视图出口也在这两个 XIB 中设置。使用时应轮流正确重新连接所有插座loadNibNamed.

如果您正在为 iOS 4 进行构建,您还可以替换loadNibNamed与这些行:

UINib *nib = [UINib nibWithNibName:@"MenuView" bundle:nil];
UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = portraitView;

and

UINib *nib = [UINib nibWithNibName:@"MenuViewLandscape" bundle:nil];
UIView *landscapeView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = landscapeView;

这些假定您要显示的 UIView 立即位于 XIB 中的文件所有者和第一响应者代理对象之后。

然后您只需要确保视图针对界面方向正确旋转。对于所有非默认纵向的视图,通过设置transform视图的属性和使用CGAffineTransformMakeRotation()具有适当的值,如上例所示。

仅旋转就可以解决您的问题,而无需额外加载 NIB。但是,加载一个全新的实例MenuViewController并将其视图设置为现有的MenuViewController的视图可能会导致生命周期和轮换事件出现一些奇怪的行为,因此尝试上面的示例可能会更安全。它们还省去了您必须创建新的麻烦MenuViewController当您只需要其中的视图时。

希望这可以帮助!

Justin

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用一个 UIViewController 和两个 XIB 处理 iPad 上的方向变化 的相关文章

  • 应用程序关闭时下载报刊亭应用程序

    我正在实现一个报摊杂志应用程序 它通过 Urban Airship 推送通知接收新期刊 只要应用程序位于前台或后台 这就可以正常工作 但据我所知 当应用程序完全关闭时也应该触发下载 但发送推送 content available 1如果我的
  • 隐藏故事板中的导航栏

    谁能告诉我如何隐藏故事板中的导航栏 我下面的代码在模拟器中运行时工作正常 但它仍然出现在我的故事板中 这真的很烦我 因为它弄乱了我的图像的位置 有人可以帮忙吗 void viewWillAppear BOOL animated super
  • 为什么单个 Vec4 乘法会大大减慢我的 ogl es 2 片段着色器的速度?

    我正在为 iOS 设备编写 2D OpenGL 游戏 现在 我正在研究 iPad 第一代 上的性能 该游戏有 ogl 1 1 和 2 0 的代码路径 我可以通过 define 使用 ogl 2 0 时 分析器告诉我 我的渲染器利用率 相当稳
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • UIBarButtonItem + popover segue 创建多个 popover

    我目前有一个 iPad 应用程序 其 UIToolbar 包含两个 UIBarButtonItems 每个都连接到弹出框 segue 当用户触摸任一 UIBarButtonItems 时 将创建弹出窗口而不是切换弹出窗口 这会创建多个重叠的
  • 将我的免费应用程序从 Universal 升级到仅限 iPhone

    我释放我的free app到 appStore 它的版本是 1 0 它是一个Universal app 现在我想发布 1 1 版本到 appStore 我将其升级到iPhone only appStore会拒绝我吗 我已阅读类似的问题 ht
  • 如何在 UILabel 上创建强烈的红光效果

    我需要在 UILabel 或 CATextLayer 上实现外发光效果 如上所述 我知道要在文本上创建发光效果 我需要偏移量为 0 0 的阴影 我已经接触到quartz2D级别 以下是我正在使用的代码 backgroundDownLabel
  • Monotouch如何管理资源(字符串、图像等)?

    在 Android 中 我将应用程序字符串放入名为的文件中strings xml 例如 对于意大利语翻译 我需要创建一个 value it 文件夹并放入strings xml在此新文件夹中包含带有意大利语标签的文件 Monotouch 如何
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • #import "xxx" 和 #import 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 include 和 include 文件名 有什么区别 https stackoverflow com questions 21593 what is the difference between i
  • 如何正确使用CCSpriteFrameCache和CCSpriteBatchNode?

    我不明白当我将 CCSpriteFrameCache 或 CCSpriteBatchNode 添加到我的 cocos2d 应用程序时我到底做了什么 有人可以解释一下以下几点吗 如果你能解释一些的话会很有帮助 请根据你回答的问题在你的答案前写
  • 不确定如何在使用故事板时正确子类化 UIApplication

    我想在 X 次用户不活动 没有触发触摸事件 后返回故事板的初始视图控制器 经过一些研究 我发现检测不活动的最常见方法是触发 NSTimer 并在事件触发时重置间隔 为了检测触发的事件 我们在 UIApplication 的子类中重写 UIA
  • java中如何围绕另一个移动对象旋转一个对象?

    我对 Java 很陌生 想要编写一个简单的太阳系统 其中月球绕地球旋转 地球绕太阳旋转 一切正常 除了月亮不想正确移动 由于地球偏离月球的初始位置 月球的自转半径会根据该距离而增大 同样 当地球接近月球惯性位置时 自转半径会减小 如果初始位
  • 在 Java 中旋转多边形

    我正在编写的程序在屏幕上绘制多个星星 并给它们随机的方向和速度 星星会从面板边缘反弹并留在里面 我需要让星星在移动时旋转 我尝试了很多事情 但我无法弄清楚 下面是我用来绘制星星并移动它们的代码 附加信息 星星位于名为 星星 的集合中 我写了
  • UISearchBar 与 UISearchDisplayController 在屏幕外动画

    我有标准的 iPad 视图控制器 其顶部有一个自定义导航栏 在 xib 文件中 我添加了一个与视图右边缘对齐的 UISearchBar 搜索栏的宽度为 320 像素 我像这样初始化一个搜索显示控制器 Search display contr
  • 在特定点停止 CABasicAnimation

    我正在使用创建的旋转动画CABasicAnimation 它旋转一个UIView超过2秒 但我需要能够阻止它UIView被感动了 如果我删除动画 视图将处于与动画开始之前相同的位置 这是我的动画代码 float duration 2 0 f
  • 如何在上传图像文件时禁用捕获(在ipad上使用safari)

    我想在 ipad 上使用 safari 上传图像 这是我的 html 代码
  • 如何在iPhone应用程序中的类结构中实现主键和外键表数据[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何连接sqlite数据库中的两个表数据 if sqlite3 open dbPath UTF8String database SQL
  • 加载新控制器时,iPhone 横向模式切换到纵向模式

    我的应用程序在横向模式下正确启动并且运行良好 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation if interf

随机推荐

  • 通过 Win32 检索 dll 版本信息 - VerQueryValue(...) 在 Win7 x64 下崩溃

    受人尊敬的开源 NET 包装器实现 夏普比特 http sharpbits codeplex com of Windows BITS 服务 http en wikipedia org wiki Background Intelligent
  • IntelliJ IDEA Gradle 项目无法识别/定位 Antlr 生成的源

    我在一个简单的 Kotlin Gradle 项目中使用 Antlr 虽然我的 Gradle 构建正在生成 Antlr 源 但它们不可用于导入到项目中 正如您所看到的 在左侧 正在生成类 Lexer Parser 等 我也配置了这个gener
  • infinispan 树缓存工作错误

    我使用 infinispan 8 2 6 Final 中的树缓存 我有下一个服务 public class TestService public static final String FIRST CACHE firstCache priv
  • 尚未注册“Microsoft.Extensions.Logging.ILogger”类型的服务

    创建了一个空白的 ASP NET Core 2 0 应用程序 在 Startup cs 中 想要记录传入的请求 所以在配置方法中 我使用 Microsoft Extensions Logging ILogger public void Co
  • 无法通过 API 发布到 LinkedIn 群组

    通过 LinkedIn API 向群组发帖时 请遵循此处的 创建群组帖子 示例 https learn microsoft com en us linkedin compliance integrations groups group po
  • C 中的关闭管道文件描述符

    这是代码 int main int fd 2 pipe fd int r fork if r gt 0 parent close fd 0 do a bunch of things else child close fd 1 do a bu
  • 二叉树插入(按顺序排序)

    我已经在互联网上搜索有关此问题的帮助 但我需要帮助 这并不完全是二叉树的普通插入问题 因为我们不能直接处理树结构本身 我的教授自己写了这篇文章 并为我们提供了可以用来编写与二叉树相关的函数的函数 因此 我无法使用节点和指针之类的东西 这也是
  • 服务器错误:获取 pod 日志时出现拨号 tcp i/o 超时错误

    我正在开发 OpenShift Origin 1 1 它使用 kubernetes 作为 docker 容器的编排工具 我正在创建 Pod 但看不到构建日志 user ip master oc get pods NAME READY STA
  • cloudfront 私人限时 url

    我有一个客户想要在线销售教程视频 我已经从 CF 中预览了他的教程 这是公开的 现在我想使用c sdk生成私有的 限时的URL 以允许购买教程的客户在有限的时间内下载它们 确认付款后 我想生成一个 URL 并通过电子邮件将其发送给客户 CF
  • Django:何时使用 QuerySet none()

    刚刚在Django 文档 https docs djangoproject com en dev ref models querysets none 调用 none 将创建一个永远不会返回任何对象的查询集 访问结果时不会执行任何查询 一个
  • 用于匹配 URL 后两部分的正则表达式

    我正在努力找出最好的regex仅匹配 url 中的最后两个字符串 例如与www stackoverflow com我只想匹配stackoverflow com 我遇到的问题是某些字符串可能有大量句点 例如 a abcnewsplus i a
  • 如何实现上个月/下个月按钮并显示当月的日期?

    设想 我有一个费用跟踪 iOS 应用程序 我将费用详细信息视图控制器中的费用存储到表视图 带有获取的结果控制器 中 该表视图显示费用列表以及类别 金额和日期 我的实体 金钱 中确实有一个日期属性 它是支出或收入的父实体 问题 我想要的是基本
  • 为什么数据库复制时从机读取速度比主机快

    在主 从数据库复制中 所有写入都转到主机 所有读取都转到从机 主机将数据复制到从机 当主机将数据复制到从机时 从机必须执行写入操作以锁定该行 从从机读取速度更快 但为什么呢 奴隶should be a lot更快 因为 它写入的数据量与ma
  • 使用 x-www-form-urlencoded 的 HttpClient POST 请求

    我正在尝试发出 POST 请求x www form urlencoded内容类型标头如下 login username password Observable
  • 取消转义 Ruby 字符串中的特殊字符序列

    我正在从包含如下序列的文件加载文本 abc ndef tghi 我想 转义 所有特殊字符 例如来治疗 n作为换行符和 t作为选项卡等 而不是自动以例如 n or t在字符串中 是否有捷径可寻 文本将按照文件中的原样加载 如果文件具有文字文本
  • 403 错误代码 Google Drive Python 已超出此文件的下载配额

    我使用 Google Drive Python 库https developers google com drive v3 web quickstart python step 1 turn on the api name https de
  • WCF REST 请求拦截器身份验证

    我正在尝试在 WCF RequestInterceptor 中进行一些基本身份验证 我在用本文 http msdn microsoft com en us library ee391967 aspx作为一个开始 我遇到的问题是拦截器和服务之
  • 在 Flask 中返回 Excel 文件

    我正在 python 3 中构建一个 Flask 应用程序 我正在尝试写入输出并响应下载 我所做的就是将 sqlite3 db 内容写入 Excel 文件 尝试发送到客户端进行下载 一切似乎都工作正常 直到创建 Excel 文件 我无法发送
  • std::变换和移动语义

    我正在使用 Boost Filesystem 在目录中创建文件列表 我用boost filesystem recursive directory iterator and std copy将每个路径放入 std vector 作为boost
  • 使用一个 UIViewController 和两个 XIB 处理 iPad 上的方向变化

    我想用一个 UIViewController 和两个 XIB 例如 MenuView 和 MenuViewLandscape 来处理 iPad 应用程序上的方向更改 那么 在 MenuViewController 的 willRotateT