如何以编程方式创建具有横向方向的UIView?

时间:2011-07-28 16:00:44

标签: iphone cocoa-touch uiview orientation transform

我有一个固定横向的iPad应用程序。一切正常,直到我以编程方式创建UIView并将其添加到我的根UIViewController的视图时 - 它的方向始终设置为纵向,而所有其他内容都以横向模式显示。这个UIView是一个模态视图,显示了一些用户的自定义表单。

AlertView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];
AlertView.opaque = NO;
AlertView.backgroundColor = [UIColor blackColor];
AlertView.alpha = 0.7;

<...> // some other configuration code

[window addSubview:AlertView];

所以问题是:如何以横向方向启动UIView?我能想到的只是使用变换:

modalView.transform = CGAffineTransformMakeRotation( ( 180 * M_PI ) / 360 );

虽然它不是太优雅的方式......

3 个答案:

答案 0 :(得分:5)

您的AlertView以纵向显示,而应用程序的其余部分以横向显示的原因是您将AlertView添加为窗口的子视图,而不是将其添加为视图控制器视图的子视图。这将它置于视图层次结构之外,通过自动旋转自动转换。

应用程序的窗口对象通过查找具有相应视图控制器的最顶层子视图来协调自动旋转。在设备旋转时,窗口会在此视图控制器上调用shouldAutorotateToInterfaceOrientation:并根据需要转换其视图。如果您希望视图自动旋转,则它必须是此视图层次结构的一部分。

因此,请执行[window addSubview:AlertView];

之类的操作,而不是[self.view addSubview:AlertView];

答案 1 :(得分:0)

要使UIViews处于横向,并且您希望根视图控制器始终处于纵向模式,您有2个选项:

  1. 通过使用转换
  2. 旋转UIView,按照您的方式进行操作
  3. 更改您允许的方式 你的根视图控制器旋转(最简单)。视图控制器将为您处理UIViews的旋转

答案 2 :(得分:0)

您应该尝试设置自动调整遮罩 当ViewController旋转时,您的AlertView的界限也会改变。

yourView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);