xcode ipad横向 - 重新定位对象

时间:2013-04-07 02:47:19

标签: xcode ipad orientation landscape

尝试让我的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)
    }
}

2 个答案:

答案 0 :(得分:0)

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

- (BOOL) shouldAutorotate
{
return YES;
 }

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

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

答案 1 :(得分:0)

尝试将重新定位代码移至viewWillLayoutSubviews

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

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

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