2011-03-02 60 views
1

編輯:給出答案在設備上工作,但要注意它不能在模擬器上。沒有完美的方式來檢測iPad上的設備方向?

當我的iPad啓動時,我會告訴加載標籤,在屏幕的正中。我設置了它的autoresizingMask,以便更新方向。

隨着應用程序啓動時,標籤的文本改變了,所以我想基於其新的長度回到中心的標籤。但是,下面的代碼段沒有正確居中標籤:

- (void) setLabelText:(NSString*)text { 
    CGSize maximumLabelSize = CGSizeMake(500,20); 
    CGSize expectedLabelSize = [text sizeWithFont:loadingLabel.font 
           constrainedToSize:maximumLabelSize 
            lineBreakMode:loadingLabel.lineBreakMode]; 
    loadingLabel.frame = CGRectMake(self.view.frame.size.width/2-expectedLabelSize.width/2, 
            loadingLabel.frame.origin.y, 
            expectedLabelSize.width, 
            loadingLabel.frame.size.height); 
    loadingLabel.text = text; 
} 

我也算是檢查[的UIDevice currentDevice]取向],而如果iPad是在橫向模式下,然後我會用自我。 view.frame.size.height設置標籤的xOrigin。

然而,如果該設備是面向上或面向下,(而不是橫向或縱向),則此方法將失敗。我的appDelegate中還有一個lastOrientation變量,它基於設備的最後已知方向記住應用程序是橫向還是縱向,即使面朝上或朝下。但是,在啓動時,這個變量不一定設置。

有一些簡單的解決辦法,我是缺少在這裏,這樣我就可以調整大小和中心我的標籤?

編輯:我試圖檢查基於諮詢UIStatusBarOrientation發佈,但它不工作:

if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft 
    || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) { 
    NSLog(@"landscape"); 
    width = self.view.frame.size.height; 
} else { 
    NSLog(@"portrait"); 
} 

這始終記錄畫像,至少在啓動時,在模擬器上。

+0

嗯,你是什麼意思「如果該設備是朝上還是朝下,(而不是橫向或縱向),那麼這個方法失敗。」? – ColdLogic 2011-03-02 22:05:18

+0

檢查狀態欄方向是否有幫助? – hotpaw2 2011-03-02 22:05:28

+0

@ColdLogic - iPad可以是人像,風景,或面朝上,或面朝下。當它面朝上時,它不一定是肖像或風景。您可以按照以下方式演示此操作 - 將iPad放在縱向桌面上,然後旋轉它。你可以看到設備不會變成風景,這使得知道如何使事情變得棘手。 – 2011-03-02 22:35:50

回答

2

檢查[[UIApplication sharedApplication] statusBarOrientation]

+0

這似乎是很好的建議,所以我試了一下,但沒有奏效。查看我的代碼編輯:( – 2011-03-02 22:53:40

+0

)您正在檢查iPad是否同時處於右側和左側方向。使用or運算符,'||'不是和運算符,&&' – 2011-03-02 22:55:59

+0

我剛剛也注意到了這一點,並嘗試了||,但它失敗了,再次編輯答案 – 2011-03-02 22:56:47

0

我發現了一個竅門來解決朝上方向的問題!

延時定向檢查出爐後的應用程序已開始運行,然後設置變量,查看大小等。!!!

//CODE 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    //DELAY 
    [NSTimer scheduledTimerWithTimeInterval:0.5 
        target:self 
        selector:@selector(delayedCheck) 
        userInfo:nil 
        repeats:NO]; 

} 


-(void)delayedCheck{ 

    //DETERMINE ORIENTATION 
    if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait){ 
     FACING = @"PU"; 
    } 
    if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown){ 
     FACING = @"PD"; 
    } 
    if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft){ 
     FACING = @"LL"; 
    } 
    if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight){ 
     FACING = @"LR"; 
    } 
    //DETERMINE ORIENTATION 

    //START 
    [self setStuff]; 
    //START 

} 


-(void)setStuff{ 

    if(FACING == @"PU"){ 
      //logic for Portrait 
    } 
    else 
    if(FACING == @"PD"){ 
      //logic for PortraitUpsideDown 
    } 
    else{ 
    if(FACING == @"LL"){ 
      //logic for LandscapeLeft 
    } 
    else 
    if(FACING == @"LR"){ 
      //logic for LandscapeRight 
    } 

} 

//CODE 

您可以addSubviews,位置元素等在「setStuff」功能......任何最初將取決於方向!

:d

克里斯愛蓮心