2015-02-05 73 views
3

我正在处理我的第一个Xcode项目,我想知道是否有可能有2个视图控制器,其中一个将有一个肖像视图,第二个将有水平。有什么办法可以将这两个视图控制器链接起来,以便在旋转设备时视图会改变?更改设备旋转视图控制器

+0

您是否希望对旋转有完全不同的看法,或者您是否只希望子视图调整其大小?如果是后者,则应该使用AutoLayout或Size Classes。 – BSMP 2015-02-05 16:08:26

+0

我想要一个完全不同的视图,当它旋转 – John 2015-02-05 16:08:55

回答

0

在viewDidLoad中,将旋转的视图添加到超级视图中,并使用对象[UIDevice currentDevice]将注册观察者注册到UIDeviceOrientationDidChangeNotification。 在选择器上设置其框架。然后转动新的旋转视图中,并设置旧观点的alpha为0.0

- (void)deviceOrientationChangedNotification:(NSNotification *)notification 
{ 
    UIDevice *device = [notification object]; 
    UIDeviceOrientation orientation = device.orientation; 

    if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) 
    { 
     [rotatedView setTransform:CGAffineTransformMakeRotation(M_PI_2)]; 
     rotatedView.frame = [UIScreen mainScreen].bounds; 
     oldView.alpha = 0.0; 
    } 
} 
+0

你在哪里“添加旋转视图到superview”在你的示例代码? – Caleb 2015-02-05 16:47:48

+0

我站在更正,我添加viewDidLoad作为子视图。 – rcat24 2015-02-05 17:07:24

0

我不建议你这样做,因为有一些苹果已经设计用于管理应用程序的导航intuitives UI控制器,您不能让用户猜测如何在您的应用中执行某些任务,您必须向他们展示如何执行此操作。 因此,旋转设备以转到另一个视图控制器,如同您所说:旋转时我需要一个完全不同的视图...不是一个好主意。

阅读完整的iOS人机界面指南,看看我们推荐什么样的,什么是不:

iOS Human Interface Guidelines

特别要阅读:Adaptivity and Layout

避免在布局无偿变化。在所有环境中都有类似的体验,让用户在旋转设备或在不同设备上运行应用时可以保持其使用模式。例如,如果使用网格在横向常规环境中显示图像,则不必在水平紧凑环境中的列表中显示相同的信息,但可以调整网格的尺寸。

+0

也许你可以详细说明你推荐的原因吗? HIG涵盖了很多理由 - 只是提供链接并不能真正帮助解释你的推理。 (另外,让你的答案完全依赖于一个链接 - 链接不会中断是个好主意。) – Caleb 2015-02-05 16:41:17

+0

改变另一个viewController不是一个好主意,我必须旋转这个设备,这不是一个直观的和正确的方式来管理应用程序的导航(这是他想要的)。很显然,他是一个非常业余的人,并没有阅读关于iOS界面的苹果指南(我通过链接推荐他,我不会用这种方式向他解释所有的指南)。 – 2015-02-05 17:02:17

+0

一款应用程序在不同的方向呈现出不同的风格并不鲜见 - 例如尝试旋转苹果的“股票”应用程序。有时单个视图控制器可以管理两个方向,但同时对每个方向使用单独的控制器也许有意义。请注意,单词*免费*并不意味着*全部*。我并不是说你错了,只是除非你解释,否则不可能理解你的建议。 – Caleb 2015-02-05 18:53:35