1

我搜索了每个地方,但没有找到解决方案我是 iphone 中的新手。在我设置导航高度的每个地方,或者我的视图没有像问题一样按方向旋转。我的视图正在旋转,但我的导航栏在相同如果您有解决方案,请有人帮助我。谢谢,我已经在下面显示了一些我用于方向的代码。当我点击我的标签栏时,我的模拟器是自动旋转的,我希望标签栏也旋转,但仅使用此代码模拟器是旋转而不是标签栏和导航栏,对不起我的英语不好。

CGAffineTransform transform = CGAffineTransformIdentity;

switch ([[UIApplication sharedApplication] statusBarOrientation]) 
{

    case UIInterfaceOrientationPortrait:
        transform = CGAffineTransformMakeRotation(M_PI_2);
        break;

    default:
        break;
}

[[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationPortrait];

[UIView animateWithDuration:0.2f animations:^ {

    [self.navigationController.view setTransform:transform];

}];

[self.view setFrame:CGRectMake(0, 0, 320, 480)];
[self.view setNeedsLayout];
4

1 回答 1

1

这段代码,无意冒犯,非常好奇。我不确定您要做什么。你想解决什么问题?如果您不是很小心,使用 CGAffineTransform 肯定会产生奇怪的结果,就像您所描述的那样。

如果您只想确保您的应用成功支持横向和纵向,您可以shouldAutorotateToInterfaceOrientation在视图控制器中实现。执行此操作时,所有各种控件都会相应地重新定向。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Support all orientations on iPad
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
        return YES;

    // otherwise, for iPhone, support portrait and landscape left and right

    return ((interfaceOrientation == UIInterfaceOrientationPortrait) ||
        (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
        (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

但是,如果我误解了您想要做的事情,即,您正在尝试做一些比仅支持横向和纵向方向更复杂的事情,请告诉我。


我很抱歉,因为我不记得我最初从哪里得到这段代码(但它在 SO here中被引用),但以下可用于强制横向:

首先,确保您的 shouldAutoRotateToInterfaceOrientation 应如下所示:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
        (interfaceOrientation == UIInterfaceOrientationLandscapeRight))
        return YES;
    else
        return NO;
}

二、在viewDidLoad中,添加如下代码:

if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    UIView *view = [window.subviews objectAtIndex:0];
    [view removeFromSuperview];
    [window addSubview:view];
}

出于某种原因,从主窗口中删除视图然后重新添加它会强制它查询 shouldAutorotateToInterfaceOrientation 并正确设置方向。鉴于这不是 Apple 认可的方法,也许人们应该避免使用它,但它对我有用。你的旅费可能会改变。但是那个 SO 讨论也提到了其他技术。

于 2012-04-18T04:41:15.957 回答