iPad/iPhone多方位最佳实践?

ini*_*nch 4 iphone objective-c interface-builder ipad

我想将我的观点转换为适合任何方向的工作(特别是因为它推荐用于iPad).我一直在使用IB来解决问题,我不确定如何最好地继续下去.

我理想的是在IB中旋转视图,重做布局,并将两个方向保存到同一个XIB,以便视图自动知道方向更改时要做什么.这似乎不可能.

我知道当方向改变时我可以在代码中重新排列视图,但是使用IB没有多大意义,因为我的一个主要优点就是将所有丑陋的布局代码从我的逻辑中分离出来.

其他人为此做了什么?他们只是设计他们的视图,以便UIViewAutoResizing标志可以适当地处理旋转吗?他们是否有针对每个方向的多个视图,并以某种方式平滑地切换它们?

Fre*_*red 5

您可以在同一个XIB中创建两个单独的视图,然后实现以下代码:

至 @interface

IBOutlet UIView *landscapeView;
IBOutlet UIView *portraitView;
Run Code Online (Sandbox Code Playgroud)

并 @implementation

- (void) viewDidLoad {
self.view.frame = [[UIScreen mainScreen] applicationFrame];
  landscapeView.autoresizesSubviews = NO;  <- IMPORTANT!
  portraitView.autoresizesSubviews = NO;   <- IMPORTANT!
}
- (BOOL)shouldAutorotateToInt .... {
  if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight) self.view = landscapeView;
  else if ((interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) self.view = portraitView;
  return YES;
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*d H 5

我在这里(以及关于这个主题的StackOverFlow上的其他地方)找到了这些信息,这让我想到了我以前的答案.如果你有很多顶级对象,这只会很繁琐.

然后,我想到你可以创建一个"帮助"对象,所以我创建了一个项目来演示该技术.基本上,帮助者在视图中具有针对每个感兴趣对象的出口.ViewController本身有两个Helper对象(一个用于p,一个用于l),你可以在NIB中实例化它们.在方向更改时,将视图控制器的帮助程序指针切换到相应的帮助程序,然后更新self.view.它非常简单(这篇文章更难).

那么,你会如何开始?如果您事先知道需要两个单独的视图,那么它会有所帮助.一旦您知道,请在下面引用的项目中使用Helper模板,进行调整,将其添加到NIB,然后将帮助连接到纵向视图中的相应对象.View Controller本身只是对两个助手的引用,以及一个"curHelper"指针.Helper ivars是公共的,因此View Controller可以引用诸如"curHelper-> label1.text = ...之类的项目 - 成本是单指针解除引用(也可以只使用属性 - 您的调用).

此外,您可以在任一视图中直接连接来自对象的IBActions.所以,让我们来看看:

  • 创建NIB
  • 创建一个Helper对象,并在名为Portrait的nib中实例化一个
  • 将所有IBOutlet添加到Helper对象,然后在dealloc,viewWillUnload中处理
  • 将IBActions正常放入View Controller中
  • 连接NIB - Helper->纵向视图插座,操作视图控制器
  • 让它在Portrait中工作
  • 添加一个新的Helper对象,称之为Landscape
  • 复制当前纵向视图,旋转它并保存
  • 将景观Helper的出口连接到新的景观视图(已为您设置的动作!)

显然你需要从现在起进行重复更改,但在任何双笔尖方案中你都必须这样做.在上述技术中,所有插座名称保持不变.

视图控制器需要在接收到它时向两个助手发送"viewDidUnload",并释放助手(然后释放他们的出口).

注意:我只是将它们放在一起看看它看起来如何.如果你想看到代码和一个非常小的演示,你可以从名为Helpers.zip的iPhone文件夹中的public dot me dot com slash dhoerl下载它.如果需要,我会更新此文本和此文本.