我从未玩过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方法,以便在手机旋转时,我可以调整所有组件的大小?
答案 0 :(得分:3)
崩溃是由这一行引起的:
NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);
orientation
是enum
值,因此格式说明符应为%i
而不是%@
。
支持轮换的最简单方法是实现:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
返回YES
以获取您希望支持的方向。不要在此方法中进行任何调整大小。使用视图struts和spring确保它们可以正确调整大小并重新定位自己以进行备用旋转。
答案 1 :(得分:0)
这是您的日志记录代码的问题:
NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);
日志记录字符串中的格式说明符%@
是NSString
指针的占位符。当应用程序到达此点时,它会查看方向变量,尝试取消引用它以进入NSString
实例,然后崩溃,因为它根本不是指针,它是枚举值。