2013-06-05 79 views
5

我知道之前有類似的問題,但這是一個更具體的用例(從靜態庫控制方向,無法在根視圖控制器中編寫)。僅從一個視圖控制器的靜態庫維護iOS縱向方向

我有一個靜態庫,它將UI元素作爲疊加層添加到傳遞的視圖控制器(客戶端的根視圖控制器)中作爲子視圖。問題是我們的用戶界面元素只支持縱向,而我們客戶的應用程序可能支持縱向和橫向。這很好,只要我們的用戶界面元素不會在我們客戶的視圖執行時進行自動轉換。

我想將方向鎖定爲只適用於我們的視圖控制器的肖像。在iOS 6中,當我用我的圖書館中的視圖控制器下面的代碼,它不會影響自動旋轉的所有行爲:

-(BOOL)shouldAutorotate{ 
return NO; 
} 

-(NSInteger)supportedInterfaceOrientations{ 
    NSInteger orientationMask = 0; 
    if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortrait]) 
     orientationMask |= UIInterfaceOrientationMaskPortrait; 
    return orientationMask; 
} 

當我把同樣的代碼在根視圖控制器,它完美,應用程序不再自動旋轉。但是,這不是我們的選擇,因爲在生產中我們將無法訪問我們客戶端的根視圖控制器。有沒有辦法鎖定從一個根視圖控制器的視圖方向,或只鎖定一個視圖控制器的方向?任何其他方式來實現我沒有想到的我們需要的東西?希望可以在iOS <中工作的解決方案=如果可能的話,則可以使用= 6

+0

你如何解釋在景觀已被該設備時,你的元素被實例化? –

+0

你有沒有找到解決方案? –

回答

0

您無法鎖定整個應用程序中只有一個視圖控制器的方向。因此,您必須在視圖啓動和方向改變時使用父視圖框架設置變換角度。 (UIInterfaceOrientation)fromInterfaceOrientation {

UIInterfaceOrientation取向= [[UIApplication的sharedApplication] statusBarOrientation:

你對這些視圖控制器類

- (void)viewWillAppear:(BOOL)animated{ 
[super viewWillAppear:animated]; 
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { 
    [[self view] setBounds:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)]; 
    CGFloat radians = atan2f(self.view.transform.b, self.view.transform.a); 
    if (radians!=M_PI_2) { 
     [[self view] setTransform:CGAffineTransformMakeRotation(M_PI_2)]; 

    } 

} 

}

  • (無效)didRotateFromInterfaceOrientation添加代碼]。 if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight){[self view] setBounds:CGRectMake(0,0,self.view.frame.size.height,self.view.frame.size.width)] ; CGFloat radians = atan2f(self.view.transform.b,self.view.transform.a); (radians!= M_PI_2){[self view] setTransform:CGAffineTransformMakeRotation(M_PI_2)];

    } 
    

    }否則{

    [[自視圖]的setBounds:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)]; CGFloat radians = atan2f(self.view.transform.b,self.view.transform.a); (radians!= 0){[self view] setTransform:CGAffineTransformMakeRotation(0)];

    } 
    

    }}

相關問題