2013-10-30 2 views
0

을보기를 조정 내가 고민했던 문제입니다. 로드 된 후에는 세로보기가 아주 좋습니다. 그러나 장치의 회전을 처리하고 싶습니다. 따라서 나는 willAnimateRotationToInterfaceOrientation 방법을 사용합니다.회전을 취급 및 프로그램 (엑스 코드) 여기

이 메서드 내에서 모든 요소를 ​​조정하는 함수를 호출합니다. 그 기능은 단지 모든 내 견해를 통과하고 그들 각각에 새로운 CGRect을 설정합니다. 세로 방향 (위, 아래)에서는 잘 작동하지만 일단 가로 방향으로 변경하면 자릅니다.

두 질문 :

  1. 그런 행동에 대한 가능성이 가장 높은 이유는 무엇입니까?
  2. horisontal/vertical orientation에 대한 별도의 뷰를 만들지 않고 장치 회전을 처리 할 것을 제안 하시겠습니까?
+0

자르면 제대로 'CGRects'로 설정하지 않는 것입니다. 또한 이것은 stuts/springs 및 autolayout이 설계된 것입니다. 그것들을보고 그들이 당신의 필요에 적합한 지보십시오. – Firo

+0

iPhone에서 거꾸로보기를 허용하지 않는 것이 좋습니다. 하지만 @Firo가 지적했듯이'CGRects '를 올바르게 설정하지 않았을 가능성이 높습니다. Autolayout이 프로그램 적으로 아무 것도하지 않고 로테이션을 제대로 처리 할 수 ​​있도록'struts' /'springs '을 사용할 수 있습니다. – nhgrif

+0

IOS 5.1 이상을 목표로하고 있습니까? AutoResizingMasks를 사용하여보기를 조정할 수 있다면 IOS 6.0 이상을 타겟팅하는 경우 AutoLayout을 사용해야합니다. 일부보기의 경우 수동으로 프레임을 설정해야합니다. –

답변

0

핵심 부분이 누락 된 것 같습니다. 보기에서 세로보기의 프레임을 설정할 때 프레임이로드되지만보기가 변경되면 가로로 변경되지만 다시 세로보기의 프레임을 설정하지 않은 것으로 보입니다. 사용 통보

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 


-(void) orientationChanged:(NSNotification *)notification 
{ 
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 

     UIDeviceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

     if((orientation == UIDeviceOrientationPortrait) || (orientation == UIDeviceOrientationPortraitUpsideDown)) { 
      // set frame here 
     }else if ((orientation == UIDeviceOrientationLandscapeLeft) || (orientation == UIDeviceOrientationLandscapeRight)){ 
      // set frame here too 
     } 
    }]; 
} 
+0

왜'willAnimateRotationToInterfaceOrientation : duration :'을 오버라이드하지 않는 것이 좋을까요? 시각적 인 UIViewController에서 회전을 처리하려면이 기능이 실제로 도움이됩니까? – Firo

+0

알림에 대한 일부 시나리오 목록에서 찾은 것이 더 낫다고 생각하지만 다른 혜택은 없다고 생각합니다. – Retro