2011-03-02 3 views
1

편집 : 주어진 답변은 장치에서 작동하지만 시뮬레이터에서 실패합니다.iPad에서 기기 방향을 감지하는 완벽한 방법이 없습니까?

iPad가 시작되면 화면의 가운데에 로딩 레이블이 표시됩니다. 자동 크기 조정 마스크를 설정하여 방향 변경을 최소화했습니다.

앱이 시작되면 라벨의 텍스트가 변경되므로 새로운 길이를 기준으로 라벨을 다시 정렬하고 싶습니다. 나는 또한 [[UIDevice currentDevice] 방향] 체크 간주

- (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; 
} 

, 그리고 아이 패드가 가로 모드에있는 경우, 그때 자기를 사용하십시오 : 그러나 다음 코드 조각은 제대로 라벨을 중심으로하지 않습니다. view.frame.size.height를 사용하여 레이블의 xOrigin을 설정합니다.

그러나 장치가 앞면 또는 뒷면이 보이면 (가로 또는 세로가 아닌 경우)이 방법은 실패합니다. appDelegate에 lastOrientation 변수가 있습니다. appOelegate는 앱이 가로 또는 세로인지, 심지어 기기가 마지막으로 인식 한 방향을 기준으로 앞면이 보이거나 아래로 향하는 경우에도 기억합니다. 그러나 시작시이 변수는 반드시 설정되지는 않습니다.

여기에 누락 된 간단한 해결책이 있습니까? 크기를 조정하고 레이블을 가운데에 맞출 수 있습니까?

편집 : 게시 된 조언에 따라 UIStatusBarOrientation을 확인했지만, 그것은 작동하지 않습니다이 항상 시뮬레이터, 적어도 시작에, 세로를 기록

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

.

+0

음, 당신은 무엇을 의미합니까? – ColdLogic

+0

상태 표시 줄 방향을 확인하는 것이 도움이됩니까? – hotpaw2

+0

@ColdLogic - iPad는 세로, 가로 또는 세로가 될 수 있습니다. 얼굴을 위로 할 때 반드시 세로 또는 가로가되는 것은 아닙니다. 다음과 같이 설명 할 수 있습니다. iPad를 Portrait에 놓고 회전시킵니다. 장치가 가로로 보이지 않는 것을 볼 수 있습니다. 이렇게하면 물건을 까다로워지게하는 방법을 알 수 있습니다. –

답변

2

확인 [[UIApplication sharedApplication] statusBarOrientation]

+0

이것은 좋은 조언처럼 보였으므로 시도했지만 작동하지 않았습니다. 내 코드 편집보기 : ( –

+0

iPad가 오른쪽 및 왼쪽 방향으로 동시에 있는지 확인하고 있습니다. 연산자 and 연산자,'||'isntead 및 연산자, '&&'를 사용하십시오. –

+0

방금 ​​알아 챘습니다. ||을 시도했지만 ||도 실패했지만 대답이 다시 수정되었습니다 –

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 

'setStuff'함수에서 하위 뷰, 위치 요소 등을 추가 할 수 있습니다. 처음에는 방향에 따라 달라질 수 있습니다 !!!

: D

"장치가 위로 향하거나 (가로 또는 세로가 아닌)이 메소드가 실패를 아래로 향하게됩니다."

크리스 Allinson이

관련 문제