0

试图让我的 iPad 应用程序以横向方式工作。我想在横向模式下更改一些控件的位置。我得到了日志,所以我知道我在方法中,但是,我的对象都没有移动。我错过了什么吗?

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if(toInterfaceOrientation==UIInterfaceOrientationLandscapeRight ||
   toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft)
    {
        NSLog(@"in landscape");
        // I would like to re-position my controls here but not working
        image1.frame = CGRectMake(318, 501, 100, 100);
        btnNext.frame = CGRectMake(200, 455, 100, 35)
    }
}
4

2 回答 2

0

您的代码适用于 iOS 5,但对于 iOS 6 及更高版本,请尝试使用方向掩码。这是一种方法,您可以在其中实现对象的旋转。

- (BOOL) shouldAutorotate
{
return YES;
 }

-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft   | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}

您可以删除不需要的面具。在 iOS 6 中,通过在此方法中输入您想要的对象后,您应该归档您正在尝试执行的操作。

于 2013-04-07T05:38:15.063 回答
0

尝试将您的重新定位代码移动到viewWillLayoutSubviews.

如果您真的想一路走下去,请仅在 iOS 6 中使用约束。您的 iOS 6 代码将与您的 iOS 5 代码非常、非常不同,这很烦人,但它也会更加优雅。在我书中的这个讨论中,我深入探讨了重新排列界面以响应旋转的问题:

http://www.aeth.com/iOSBook/ch19.html#SECrotationevents

我在那次讨论中提出的一个优雅的解决方案是首先使用约束设置界面,然后将其updateViewConstraints作为一个地方来调整这些约束以响应旋转。然后讨论继续展示在应用程序启动到横向的情况下如何使用viewWillLayoutSubviews设置初始界面;但是,正如它随后指出的那样,如果您可以改用约束,那就更好了。

于 2013-04-07T05:55:24.323 回答