2012-05-06 3 views
1

질문 : 화면 회전 후 자동 회전 된 UIView가 제공되는 크기를 얻을 수 있지만이 값은 이되기 전에 회전이 완료 되었습니까? 그렇다면 어떻게?화면을 회전 한 후에 자동 회전 된 UIView가 표시됩니다.

배경 : 여러 UILabels이 포함 된 UIView (화면의 기본 UIView보다 작음) 내의 열에 배열 된 화면이있는 iPad 앱을 만들고 있습니다. 레이블 수와 텍스트 길이 각 레이블에서 컴파일 시간 동안 알 수 없습니다. 이들은 런타임에서 화면에서 동적으로 배치됩니다. 알고리즘은 화면에서 잘리지 않도록 컬럼 및 너비의 최적 수를 선택합니다. rejiggering 프로세스가 사용자에게 최대한 부드럽게 표시하려면, 나는이 내부를 할 필요가 믿는 :

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

그러나 물론 회전이 완료되기 전에이 메서드가 호출되고, 따라서 필요에 알고 포함하는 UIView가 곧 갖게 될 크기를 올리십시오.

답변

1

, viewWillLayoutSubviews 당신이 찾고있는 무엇을 달성하는 것입니다.

iOS 4에서는 didRotateFromInterfaceOrientation에서 일어난다 고하더라도, 컨트롤/서브 뷰의 움직임을 애니메이션으로 표현하여 움직임을 조금 덜어 줄 수 있습니다 (나는 소리가 나지 않는다는 것을 알고 있지만, 차).

[UIView animateWithDuration:0.25 animations:^{ 
    [button setFrame:newFrame]; 
}]; 

마지막으로, autoResizingMask의 현명한 사용도 대단히 도움이 나는이 주어진 가능성이 아님을 수집하지만, : 당신이 NEWFRAME에 버튼의 움직임을 애니메이션을 적용 할 경우로 따라서, 그것은 간단합니다 당신은 서로에 대해 컨트롤을 움직이고 있습니다.

+0

로버트에게 감사드립니다. 'viewWillLayoutSubviews'가 트릭을했습니다.이 메소드는 컨테이너에 새로운 크기가 할당 된 후 자동 회전 작업 중에 호출되므로 추가 트릭을 통해 컨테이너를 가져올 필요가 없습니다. 'container.frame.size'는 예상대로 작동합니다. – curtisdf

0

체크 아웃 :

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

당신은 여기에 모든 방법을 찾을 수 있습니다

에서 iOS 5에서

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

+0

나는 그 방법을 알고있다, 고마워. 뷰가 회전하고 * 레이블이 모두 새로운 위치 또는 크기로 고정된다는 것을 의미하기 때문에 나는 거기에서 그것을하고 싶지 않습니다. 회전이 완료되면 모든 것을 준비하고 싶습니다. – curtisdf

+1

iOS 5에서 'viewWillLayoutSubviews'는 로테이션의 일부로 사용하는 것이 더 좋습니다. – Rob

+0

iOS 4에서는 didRotateFromInterfaceOrientation에서 발생하더라도 이동을 애니메이션으로 처리하여 움직임을 약간 덜어 줄 수 있습니다 (나는 소리가 나지 않지만 큰 차이가 있음을 알고 있습니다). 또한, autoResizingMask를 현명하게 사용하면 (90 %의 시간이 작업을 수행함) 대단히 도움이됩니다. – Rob

관련 문제