2012-06-04 3 views
5

현재 iPhone 응용 프로그램의 방향 변경을 처리하고 싶습니다. 문제는 컨트롤러의 뷰를 회전하거나 크기를 조정하는 것을 원하지 않는다는 것입니다. 장치 방향이 변경되면 하나의 UI 요소가 화면에서 90도 회전해야합니다.iOS 기기가 회전 할 때 방향을 하나의 요소로 변경하려면 어떻게해야합니까?

애플의 카메라 응용 프로그램은 이것의 완벽한 예입니다. 장치 방향이 바뀌면 모든 버튼이 회전하지만보기 자체는 회전하지 않습니다.

보기의 크기를 조정하고, 모든 요소를 ​​이동 한 다음 단추를 움직이게 할 수 있다고 생각하지만, 더 쉬운 방법이 있어야합니다.

미리 감사드립니다.

답변

5

1) 당신은 willRotateToInterfaceOrientation: see this question

2 화면에 2보기 계층 구조와 변화를 만들 수 있습니다

Available in iOS 2.0 and later. 

이 UIApplication.h에서 선언이 값 가용성을 액세스 할 수 UIApplicationStatusBarOrientationUserInfoKey를 사용하여) 또는 모든 회전을 직접 처리 할 수 ​​있습니다. see this question

+1

옵션 2가 완벽했습니다.나를 올바른 방향으로 가리켜 주셔서 감사합니다. 웬일인지 그 중 하나를 찾는 것이 어려웠습니다. 귀하의 게시물과 샘플 코드에 감사드립니다. 굉장해 !! – tnbeatty

+0

@tnbeatty UIDeviceOrientation의 일부 값을 잘못 처리했기 때문에 참조 된 답변을 편집했습니다. – Jiri

2

당신은

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
if(interfaceOrientation==UIInterfaceOrientationPortrait || interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     //Change frames as per orientations 
    } 

    else 
    {  
      //Change frames as per orientations 
    } 


    return NO; 
    } 

와 방향에 따라 수동으로 변경할 UI 요소의 프레임을 설정할 수 있습니다. Constants 섹션의 방향은 모두 this doc입니다.

편집 : NSNotification을 사용하여 문제를 해결할 수 있습니다.

UIApplicationDidChangeStatusBarOrientationNotification 

때 응용 프로그램의 사용자 인터페이스의 방향이 변경을 기록했다.

userInfo 사전에는 UIInterfaceOrientation 값 (UIInterfaceOrientation 참조)을 캡슐화하는 NSNumber 객체가 포함되어 있습니다.

+0

이것은 좋은 생각입니다. 그것이 제가 처음 시도한 것입니다. 문제 : 장치가 UIInterfaceOrientationPortrait에서 시작한다고 가정 해보십시오. 사용자가 장치를 UIInterfaceOrientationLandscapeLeft로 전환하면 해당 변경 사항을 감지하고 프레임을 변경할 수 있습니다. 그런 다음 사용자가 UIInterfaceOrientationPortrait로 다시 회전하면이 메서드는 호출되지 않습니다. – tnbeatty

+0

흥미로운 점은 내 경험상이 루틴은 매 회전마다 호출된다는 것입니다. – trumpetlicks

+1

내가 분명히해야 할 사항 : 이전의 설명에서 장치 방향이 실제로 변경되지 않기 때문에 -shouldAutorotateToInterfaceOrientation이 호출되지 않습니다. 따라서 휴대 전화는 Portrait 모드로 생각하고 장치가 다시 세로로 변경 될 때이 방법을 호출하지 않습니다. 말이 돼? – tnbeatty

관련 문제