0

在我的应用程序中,我想根据 iPhone 的主页按钮方向设置 UIView 方向。我使用以下方式完成了它:

/* I handled view orientation in shouldAutorotate method*/
    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
        else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
        else if (interfaceOrientation == UIInterfaceOrientationPortrait)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin;
        else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }  

其中 viewForBarButtons 是 viewController 中的 UIView。

但是如果我设置 return Yes 而不是 return (interfaceOrientation == UIInterfaceOrientationPortrait); 然后它不起作用。

如何解决这个问题。如果有人知道,请帮助我。LifeCards 应用程序中实现了类似的功能。提前致谢。

4

1 回答 1

1

上述方法是在设备方向改变时决定是否将视图旋转到特定方向。

return (interfaceOrientation == UIInterfaceOrientationPortrait);

指定仅支持纵向。

return YES;

将支持所有方向。

但是,如果您将视图控制器放在 TabBarController 中,那么只有当所有视图控制器都支持该特定方向时,它才会旋转。

而不是将上面的代码放在 willRotateToInterfaceOrientation 中自动调整对象的大小。

但是你需要知道一件事,通过指定

UIViewAutoresizingFlexibleLeftMargin

您只是指定视图可以在对象和左边距之间放置尽可能多的空间。但它会在方向更改期间保持其他方面的先前位置,因此您可能需要在物理上更改对象的原点(viewForBarButtons)

行。我猜你说的是你想要homeButton旁边的viewForBarButtons,并且需要相应地定位/旋转它的子视图。

首先注册 devie rotaion 或使用 didRotateInterfaceOrientation 来启动 viewForBarButtons 的旋转子视图。

#define degreesToRadians(x) (M_PI * x / 180.0)

旋转子视图:用子视图对象替换 self

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

    if (animated)
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3];
    }

    if (orientation == UIInterfaceOrientationPortraitUpsideDown)
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(180)); 

    else if (orientation == UIInterfaceOrientationLandscapeRight)
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(90));  

    else if (orientation == UIInterfaceOrientationLandscapeLeft)
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(-90));
    else 
        self.transform=CGAffineTransformIdentity;

    if (animated)
        [UIView commitAnimations];
于 2012-04-25T10:47:06.947 回答