手动旋转UIViews而不是自动旋转

时间:2012-10-01 19:34:18

标签: ios uiview rotation

在iOS中,手动旋转视图的正确方法是什么?我有很多自定义旋转动画,我不希望我的视图完全自动旋转。

现在,我正在这样做......

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return interfaceOrientation == UIDeviceOrientationPortrait;
}

然后,我正在这样做并根据需要更改方向更改:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];

一切正常,但是......当我尝试提供动作表,MailViewController等时,它们都以纵向显示:(

如何让我的观点知道,虽然我不希望它自动旋转,但它实际上是在响应我手动处理的方向通知?

编辑:为了澄清,并不是说我的旋转不起作用,而是当我提出一个UIActionSheet时,它假设我必须是肖像画(即使我手动旋转,所以我不是),以及它显示不正确。

3 个答案:

答案 0 :(得分:1)

手动旋转视图时尝试使用[[UIApplication sharedApplication] setStatusBarOrientation:(UIInterfaceOrientation)];

答案 1 :(得分:0)

也许你可以从shouldAutorotateToInterfaceOrientation中调用一个方法。 例如:

    - (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation
{
    if (interfaceOrientation != UIDeviceOrientationPortrait)
        [self theActionYouWantToPerform]

    // Return YES for supported orientations
    return interfaceOrientation == UIDeviceOrientationPortrait;
}

答案 2 :(得分:0)

Anton K报道的线路

[[UIApplication sharedApplication] setStatusBarOrientation:(UIInterfaceOrientation)];

让我很好!当我想使用CGAFFineTransformMakeRotation方法手动旋转UIViewController的UIView来旋转视图PI / 2弧度时,IT只是让我休息的元素。

这一行,将STATUS BAR的ORIENTATION设置为你想要的(UIInterfaceOrientation),以使UIView“手动”旋转到(UIInterfaceOrientation)的完美外观

因此,此行还会进一步显示 UIMessageView ,显示在您指示的(UIInterfaceOrientation)中。