2011-01-25 69 views
0

我从来没有玩过iPhone风景,但我有一个完全正常的iPhone应用程序,都假设用户正在观看iPhone直立。我想玩弄旋转手机,而为了做到这一点,我做了一件很简单:旋转iPhone并改变视图

我下面的代码添加到我的视图控制器:

-(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方法,以便在电话轮换时,我可以调整所有组件的大小?

+0

这是不是太多的代码。 EXC_BAD_ACCESS是访问不存在的对象导致的错误。你的控制台里有什么?它究竟发生了什么? – Icky 2011-01-25 16:36:48

回答

3

的碰撞由该线引起的:

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

orientationenum值,因此格式说明应该是不%i%@

支持旋转最简单的方法是实施:为您希望支持的方向

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

返回YES。不要在这种方法中做任何调整。使用视图struts和弹簧来确保它们调整大小并为自己的轮换正确地重新定位自己。

+1

从iOS 6开始,`shouldAutorotateToInterfaceOrientation:`已弃用;现在使用`shouldAutorotate`:http://bit.ly/1iu7EOn – piperchester 2014-01-24 17:03:55

0

这是一个与你的日志代码的一个问题:

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

的格式说明符%@在你的日志字符串是一个NSString指针的占位符。当应用程序到达这一点时,它会查看方向变量,尝试取消引用它以获取NSString实例,并崩溃,因为它根本不是指针,它是枚举值。

+1

`%@`不仅仅是一个`NSString`的占位符。它适用于任何`NSObject`甚至`CFTypeRef`s。 – 2012-02-07 07:35:18