将 iPad 应用程序转换为处理两种视图模式的最佳方法是啥?

Posted

技术标签:

【中文标题】将 iPad 应用程序转换为处理两种视图模式的最佳方法是啥?【英文标题】:What's the best way to convert iPad app to handle both view modes?将 iPad 应用程序转换为处理两种视图模式的最佳方法是什么? 【发布时间】:2013-08-29 19:05:51 【问题描述】:

我有一个现有的 iPad 应用程序(XCode 4.6、ios 6.2、ARC 和 Storyboards)。它目前仅以纵向模式在 App Store 中;我有几个横向模式的请求。不幸的是,所有的线条等都是使用 CG 方法绘制的,并以数学方式控制。这是纵向模式下的样子:

这就是它在横向模式下的样子:

我的问题是:我在哪里可以找到一些好的文档,这些文档将为我提供将这个应用程序转换为两种模式所需的基本步骤,知道绘图是数学控制的?

【问题讨论】:

这看起来是使用 CollectionView 的完美场所,为什么要使用 CG 来绘制? CG 是我弄清楚如何获得正确的行数和列数的唯一方法。此外,整个底部视图必须像 Excel 一样滚动,其中左列和顶行随数据移动。 如果您愿意,请尝试按照本教程进行操作,您也可以在此处将其应用到您的案例中。它将确保您的代码库更易于维护。 appcoda.com/ios-programming-uicollectionview-tutorial 能否制作左列和顶行使其跟随滚动? (即电子表格中的“冻结”) 当然,为什么不呢,左列可以是部分标题,顶部可以是单独的集合视图。您可以让他们简单地调整 viewWillLayoutSubviews 中的视图大小,这将自动处理单元格的重新定位。 【参考方案1】:

如果用数学方式控制,最好的方法是将所有坐标引用到父视图的尺寸,特别是属性 self.view.bounds,它会随着设备的旋转而变化。

然后当方向改变时你必须重新绘制界面。一个很好的方法是在方法内部:

-(void)viewWillLayoutSubviews

如果过去使用 CG 方法做过一些自定义视图,那么最好的方法是将所有内容都引用到边界。这样,当您通过旋转或在 iPhone 上使用它来更改屏幕尺寸时,它无需修改即可工作。

更新 想象一下,您在 (76.8, 512.0) 有一个点,这恰好是 iPad 和纵向方向,宽度为 10%,高度为 50%。 因此,对于每一对坐标,而不是使用绝对数字,您必须将它们替换为父视图尺寸的分数:

// old drawing method
CGPoint oldPoint = CGPointMake(76.8, 512.0);

// new drawing method
CGFloat W = self.view.bounds.size.width;
CGFloat H = self.view.bounds.size.height; 
CGPoint newPoint = CGPointMake(0.1 * W, 0.5 * H)  // 76.8 = 0.1 * 768; 512 = 0.5 * 1024

在第二种情况下;当你改变方向时,边界也会改变,坐标也会得到新的值,但比例将与其他方向相同,水平为 10%,垂直为 50%。

你明白了。

【讨论】:

Juan:你能指点我一些文档,这些文档会给我一些关于使用你所描述的绘图的指导吗? (我看过但显然搜索词的措辞不正确) 是的,我明白了...非常感谢您...我会试一试,看看效果如何...我会尽快回复您... . 很高兴为您提供帮助!。顺便说一句,您的应用程序的名称是什么? @spokane-dude 我的回答对你有帮助吗?你决定做什么? 我想让这个问题保持开放,直到我可以进一步检查它,特别是数学部分,如果你没问题......没有忘记你......:D

以上是关于将 iPad 应用程序转换为处理两种视图模式的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在情节提要中为 iPad 横向和纵​​向模式将不同的框架设置为相同的视图?

如何构建 HTML/JS iPad 应用程序以获得最佳性能?

ios将ipad应用程序转换为通用显示此错误笔尖但未设置视图出口

将纵向模式转换为横向模式时的 iPad 设计问题

如何在 iPad 中自动旋转期间重新排列视图

将 iPhone 应用程序转换为 iPad,然后在 iPad 中使用 splitview?