尝试让我的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)
}
}
答案 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
来设置初始界面;但是,正如它指出的那样,如果你可以使用约束,那就更好了。