我一直在研究设置单独的横向和纵向视图控制器以处理不断变化的方向的方法。下面发布的代码来自 Apple,说明了如何执行此操作。我注意到他们使用 performSegueWithIdentifier。使用 segue 似乎很奇怪。
为了在情节提要上创建一个转场,我假设我必须创建一个隐藏按钮并将连接从纵向拖到横向视图控制器。然后我可以将 segue 标识符设置为“DisplayAlternateView”。什么是默认的转场动画?还是默认关闭动画?
另外为什么这个代码在 awakeFromNib 方法中?不应该在 viewDidLoad 中吗?是否在 viewDidLoad 之前调用了 awakeFromNib?
此外,我假设我的故事板的每个场景都必须有不同的目标动作。如果我有纵向视图 A、B 和 C 以及相应的横向视图 A、B 和 C,我是否应该对 Apple 代码进行以下更改
在我看来:
selector:@selector(orientationChangedA:)
然后在我的 B
selector:@selector(orientationChangedB:)
然后在我的 C
selector:@selector(orientationChangedC:)
这样每个方法都可以执行它自己的 segue。
我觉得我可能在这里把事情复杂化了。是单独的 segues 导致我做额外的工作,还是这通常是如何处理方向切换到单独的视图控制器的?
这是来自 Apple 的代码,说明如何使用不同的视图控制器处理方向更改:
@implementation PortraitViewController
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
!isShowingLandscapeView)
{
[self performSegueWithIdentifier:@"DisplayAlternateView" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) &&
isShowingLandscapeView)
{
[self dismissViewControllerAnimated:YES completion:nil];
isShowingLandscapeView = NO;
}
}