2014-06-25 66 views
1

我正在開發一個應用程序,該應用程序使用呈現其自己的視圖控制器的第三方庫。所有可用的是一個.a庫和一個頭文件。我的應用程序只能在肖像模式下運行,但是當手機處於橫向並從庫中呈現視圖控制器時,該應用程序崩潰,並顯示以下錯誤:覆蓋第三方ViewController的Autorotation屬性

「沒有支持的方向與應用程序的方向匹配。

我的猜測是,他們寫了下面的代碼:

- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 

    // ATTENTION! Only return orientation MASK values 
    // return UIInterfaceOrientationPortrait; 

    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeLeft; 
} 

如果是這樣的話,我可能會需要覆蓋這些方法告訴OS不旋轉,並支持僅畫像。 我該如何去做這件事?

我能想到的唯一可能性是調整該視圖控制器的方法,但根據幾個SO帖子,這看起來像是一種危險的方法。

+0

[在iOS7中可能的重複如何停止第一個viewcontroller autorotating?](http://stackoverflow.com/questions/24239641/in-ios7-how-do-you-stop-the-first-viewcontroller-自轉) – holex

回答

2

你總是可以做以下(在人像模式鎖定一個視圖控制器的一個例子):

1)安裝在您的應用程序委託頭文件的屬性... @property (nonatomic) BOOL lockScreenPortraitOnly;

2)在應用程序委託實現文件中添加以下方法:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindows:(UIWindow *)window 
{ 
    if (!self.lockScreenPortraitOnly) 
     return UIInterfaceOrientationMaskAll; // or, whatever you wish to support 
    else 
     return UIInterfaceOrientationMaskPortrait; 
} 

3)從您的視圖控制器中添加以下內容:

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    ((EliotsApplicationDelegateType *)[UIApplication sharedApplication].delegate).lockScreenPortraitOnly = YES; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    ((EliotsApplicationDelegateType *)[UIApplication sharedApplication].delegate).lockScreenPortraitOnly = NO; 
} 

現在,Plist中的內容或第三方庫的功能並不重要,因爲「窗口」是最根的,因此它控制層次結構中的所有其他內容。很明顯,在我的例子中,假設你的VC在你的第三方庫代碼被啓動之前被調用(根據需要進行調整,季節和烘焙)。

希望這會有所幫助。

1

我會說繼續前進,並調整它。升級庫以測試此特定項目時,您需要小心。調整中的危險通常伴隨着蘋果API的混亂,因爲它們可能會被棄用,或者在任何發行版中改變其行爲(這可能會隨後爲用戶打破應用程序)。