2012-02-24 4 views
0

그래서 내가 장치 방향과 관련된 사용자 지정보기 만들기에 다음 튜토리얼을 따라 : 기사를 요약장치가 iOS에서 회전 할 때 뷰를 교환 처리하는 방법을

http://www.theappcodeblog.com/2011/03/30/orientation-change-tutorial-change-the-view-when-the-orientation-changes/

을, 저자는 정의를 생성 할 수 장치 회전을 감지하면 XIB 파일의 새로운 최상위보기를 가리켜 가로 및 세로 방향에 대한보기를 표시합니다.

따라서 복잡한 뷰 계층 구조 (뷰 내의 여러 단추, 슬라이더, 뷰)를 최상위에서 모두 복제하여 가로보기를 작성했습니다. 그런 다음 가로보기에 대한 맞춤 설정을 만들었습니다. 내 코드가 가로 방향을 감지하는 방법에서 내 코드는 세로 방향을 감지 할 때 가로보기 계층 구조와 세로 위쪽을 가리 킵니다.

가로보기의 모든 IBOutlets (UIView, UIButton 등)가 여전히 세로보기 계층에서 해당 객체를 참조하고 있다는 것을 제외하면 작동합니다. 런타임 동안 이러한 UI 요소에 대해 특별한 처리를 많이하므로 IBAutlets뿐 아니라 IBOutlets가 필요합니다. 가로보기에서 복사 한 UI 요소가 동일한 IBActions를 가리킬 수 있지만 세로 계층의 요소와 IBOutlets를 공유 할 수 없음을 발견했습니다.

모든 개체를 복제하고 모든 코드를 관리해야합니까 (사용할 개체를 파악해야합니까?)?

답변

1

다음은 한 가지 방법입니다.

가로보기에서 바꿀 필요가있을 때 가로보기를 오른쪽으로로드하면보기 컨트롤러를 nib 파일의 소유자로 전달할 수 있으며 nib 로더는 연결을 기반으로보기 컨트롤러의 콘센트를 덮어 씁니다 경관 펜촉에.

다시 세로보기로 바꾸려면 세로 펜촉을로드하고 파일의 소유자로보기 컨트롤러를 전달하십시오. 닙 로더가 다시 세로 컨트롤러의 연결을 기반으로하여보기 컨트롤러의 콘센트를 덮어 씁니다.

처음으로 펜촉이 필요한 경우 각 펜촉에 대해 UINib 개체를 천천히 작성하고 후속 회전시 로딩 속도를 높이기 위해 유지해야합니다.

+0

조금씩 시도해보십시오. 그래서 내가해야할 일은 1. .xib 파일을 복제하는 것입니다 (Finder 응용 프로그램에서 할 수 있습니다). 2. 레이아웃을 재정렬하십시오. 3. 적절한 시간에 내 풍경 펜촉을로드하십시오 ...이 전화와 함께 있습니까? "- (NSArray *) loadNibNamed : (NSString *) 이름 소유자 : (id) 소유자 옵션 : (NSDictionary *) 옵션".... and thats it ?? – Joe

+0

그 방법을 사용할 수 있습니다. 너무 느리다면 'UINib'을 봐야합니다. –

+0

나는 그 방법을 시도했다. 호출은 다음과 같다 : [[NSBundle mainBundle] loadNibNamed : @ "MyLandscapeOrPortraitNib"owner : self options : nil]; inside - (void) orientationChanged : (id) 객체 (가로/세로가 감지 된 경우에 따라 다름). 그러나 새로운 펜촉이로드되면 내 콘텐츠 중 일부만 보게되고 응용 프로그램이 (해당 콘텐츠가 없어서) 곧 종료됩니다. 이제 내가 알아 차린 것은, nib로드 라인을 주석 처리하면 내 응용 프로그램이 세로 모드에서 100 % 정상적으로 실행된다는 것입니다. 그런 다음 펜촉을 추가하면 가로 및 세로 모두 누락 된 콘텐츠가 표시됩니다. – Joe

0

loadNibNamed를 사용하여 해결했습니다. 기본적으로 모든 IBOulet 변수 (비 IB 변수 사용) 및 뷰에서 초기화 된 다른 변수의 상태를 저장해야했습니다. 새 Nib가로드되면 모든 것이 기본 상태로 다시 설정됩니다. 상당히 짜증나지만, 지금 당장이 문제에 접근하는 가장 좋은 방법 인 것 같습니다.

관련 문제