旋转iPhone并更改视图

时间:2011-01-25 16:29:06

标签: iphone ios uiview uiviewcontroller rotation

我从未玩过iPhone作为风景画,但我有一个完全正常工作的iPhone应用程序,它都假设用户正在观看iPhone。我想玩旋转手机,为了做到这一点,我做了一件非常简单的事情:

我将以下代码添加到我的View Controller中:

-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
    NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);

    if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight))
        tableView.frame = CGRectMake(0, 0, 480, 320);
    else
        tableView.frame = CGRectMake(0,73,320,390);


}

我收到了BAD_ACCESS错误。我根本看不到视图加载。那么,问题是什么,以及如何正确实现willRotate方法,以便在手机旋转时,我可以调整所有组件的大小?

2 个答案:

答案 0 :(得分:3)

崩溃是由这一行引起的:

NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);

orientationenum值,因此格式说明符应为%i而不是%@

支持轮换的最简单方法是实现:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

返回YES以获取您希望支持的方向。不要在此方法中进行任何调整大小。使用视图struts和spring确保它们可以正确调整大小并重新定位自己以进行备用旋转。

答案 1 :(得分:0)

这是您的日志记录代码的问题:

NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);

日志记录字符串中的格式说明符%@NSString指针的占位符。当应用程序到达此点时,它会查看方向变量,尝试取消引用它以进入NSString实例,然后崩溃,因为它根本不是指针,它是枚举值。