2011-01-25 113 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