2010-02-03 2 views
1

주로 가로 방향 인 iPhone OS 용 Three20 기반 응용 프로그램을 개발하고 싶습니다.Landscape 모드에서 Three20 샘플 프로젝트를 시작하면 터치 이벤트에 반응하지 않는 화면의 절반이 렌더링됩니다.

Three20 sample project templates를 다운로드하여 Xcode에로드하고 시뮬레이터와 3.0, 3.1, 3.1.2 SDK를 사용하는 장치에서 샘플 프로젝트 앱을 시작했습니다. 프로젝트의 Info.plist 파일에서 Initial interface orientationLandscape (right home button)으로 변경하면 예상대로 방향이 시작되었지만 화면 왼쪽의 터치 이벤트에만 응답했습니다. 여전히 세로 모드 인 것처럼 터치 이벤트에 응답하는 것처럼 보입니다. 변경된 사항은 샘플 프로젝트에서 변경된 파일 Info.plist입니다.

나는 아주 간단한 무엇인가 놓치고 있냐? 가로 방향에서 시작하는 것은 매우 기본적인 사용 사례 인 것 같습니다. 그러나 며칠 동안 인터넷 검색을 통해 문제 보고서 나 블로그 게시물을 제출 한 다른 사람을 찾을 수 없습니다.

참고 : 이것은 프리젠 테이션 방향을 도입하는 동안 훨씬 더 발전된 프로젝트에서 원래 만났던 문제이지만 문제의 원인으로 다른 코드를 배제하는 가장 기본적인 반복 가능한 예에 백업했습니다.

답변

3

모든보기에 올바른 autoresizingMask 속성 집합이 있는지 확인하십시오. 대부분의 뷰는 경계에 맞추지 않으므로 parentView의 경계를 넘어서는 내용도 볼 수 있습니다. 그러나 터치는 경계에 항상 클리핑되므로 childView가 parentView 경계 밖으로 볼 수 있지만 터치 할 수는 없습니다.

Ergo : 상위보기가 새 너비에 맞지 않으면 화면의 오른쪽 부분을 터치 할 수없는 내용으로 렌더링 할 수 있습니다.

+0

문제와 관련이없는 경우 문제가 될 수있는 것 같습니다. – Jasarien

0

특정보기를 사용하고 있습니까? 다음과 같이 간단하게 추가 할 수 있습니다.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation 
{ 
     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

뷰 컨트롤러에.

+0

이 방법은이 문제에 대한 좀 더 복잡한 인스턴스화에서 구현했지만, 간단한 방법으로이 방법을 테스트했습니다. 어떤 경우에도 조경 된 Three20보기가 화면의 오른쪽 절반에 터치 이벤트를 등록하는 데 도움이되지 않습니다. – Prairiedogg

+0

이상하게 들리 네요. 나는 내 맥을 내 앞에두고 있지 않다. 내가 집에 갈 때 그것을 볼 것입니다. –

0
- (void)viewWillAppear:(BOOL)animated 
{ 
if (![System isIpad]) 
{ 
    if (([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait) || 
    ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortraitUpsideDown)) 
    { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 
    } 
} 
[super viewWillAppear:animated]; 
// self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque; 
// self.navigationBarTintColor = [UIColor clearColor]; 
self.navigationController.navigationBarHidden = YES; 
[[UIApplication sharedApplication] setStatusBarHidden:FALSE]; 
}