2014-10-11 4 views
15

iOS 8에서 실행 중, 앱을 돌릴 때 UI를 변경해야합니다. iOS 8 오리엔테이션 변경 감지

현재이 코드를 사용하고 있습니다 :

-(BOOL)shouldAutorotate 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (orientation != UIInterfaceOrientationUnknown) [self resetTabBar]; 

    return YES; 
} 

내가 무엇을 현재의 UI를 제거하고 방향에 적합한 새로운 UI를 추가합니다. 그러나, 내 문제는이 방법은 한 번 회전 할 때마다 약 4 번 호출된다는 것입니다.

iOS 8의 방향 변경시 올바른 방법은 무엇입니까?

+6

왜 인터페이스를 변경하는 데이 방법을 사용합니까? 나는 회전하는 질문에 대답하기로되어 있다고 생각합니다. iOS 7의 경우 'willRotateToInterfaceOrientation : duration :'을 사용하고 iOS 8의 경우 'viewWillTransitionToSize : withTransitionCoordinator :'를 사용하십시오. –

+0

도움을 요청하는 사람들에게 질문을했지만 대답을 수락하거나 자세히 말하지 않았습니다. 미안하지만 그건 좋지 않아. – bisma

답변

25

Timur Kuchkarov는 정확하지만이 페이지를 처음 확인할 때 주석을 놓친 이후로 답변을 게시합니다.

iOS의 뷰 컨트롤러는 다음 방법을 구현되는 방향 변경 (회전)을 검출 8있어서

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    // Do view manipulation here. 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 

주 : 컨트롤러의 뷰가 아직 그 크기에전환되지 이때 크기 조정 코드가 뷰의 현재 크기에 의존하면주의해야합니다.

+0

또한 [this answer] (http://stackoverflow.com/a/24072010/1057616)에서 '코디네이터'를 사용하는 방법에 대해 자세히 알았습니다. – cloudrave

+4

뷰가 아직 새 크기로 전환되지 않은 경우이 메서드가 호출되므로 뷰가 새 크기로 전환 된 후 어떤 메서드가 호출됩니까? – VinceFior

+1

회전 변경이있을 때마다이 메서드가 실행되지 않는다고 지적 했어야합니다. 특정 상황에서만 회전합니다. 내 코드에서이 메서드를 사용하고 디스플레이의 인터페이스에 따라 때로는 실행되지만 때로는 실행되지 않기 때문에 모든 경우를 처리하기 위해 viewWillLayoutSubviews를 포함해야합니다. –

17

Nick이 가리키는 것처럼보기가 새로운 크기로 전환되기 바로 전에 viewWillTransitionToSize:withTransitionCoordinator: 메서드가 호출됩니다. 에 연결하기위한 닉 코드과에 this answer

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     // your code here 
    }]; 
} 

감사 : 그러나 가장 좋은 방법은 뷰가 새 크기로 전환 즉시 후 코드를 실행하는 방법에 완료 블록을 사용하는 것입니다 그것은 그의 코멘트에서.

+0

번역이 완료되었는지 확인하는 방법은 무엇입니까? – Satyam

+0

@Satyam '// your code here'라는 코멘트로 표시된 완료 블록이 전환이 완료되면 바로 실행됩니다. – VinceFior

+0

회전 변경이있을 때마다이 메서드는 실행되지 않는다고 지적 했어야합니다. 특정 상황에서만 회전합니다. 내 코드에서이 메서드를 사용하고 디스플레이의 인터페이스에 따라 때로는 실행되지만 때로는 실행되지 않기 때문에 모든 경우를 처리하기 위해 viewWillLayoutSubviews를 포함해야합니다. –