편집 : 주어진 답변은 장치에서 작동하지만 시뮬레이터에서 실패합니다.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");
}
.
음, 당신은 무엇을 의미합니까? – ColdLogic
상태 표시 줄 방향을 확인하는 것이 도움이됩니까? – hotpaw2
@ColdLogic - iPad는 세로, 가로 또는 세로가 될 수 있습니다. 얼굴을 위로 할 때 반드시 세로 또는 가로가되는 것은 아닙니다. 다음과 같이 설명 할 수 있습니다. iPad를 Portrait에 놓고 회전시킵니다. 장치가 가로로 보이지 않는 것을 볼 수 있습니다. 이렇게하면 물건을 까다로워지게하는 방법을 알 수 있습니다. –