2013-05-28 2 views
0

내 iPad 앱을 사용하여 UIView를 만들고 기본보기에 배치 할 수 있습니다. 따라서 이러한 뷰는 xib 파일 대신 프로그래밍 방식으로 생성됩니다. 그런 다음이 UIView의 좌표를 기억합니다. 사용자는 나중에이 UIView 컬렉션을 나중에 표시하도록 선택할 수 있습니다.UIView 좌표를 세로에서 가로로 또는 그 반대로 변환

---------------- ---------------- 
|Collection 1 >| > |   | | 
|Collection 2 | | View A | | 
|Collection 3 | |   | | 
|    | |--------------| 
|    | |  |  | 
|    | |  | View B | 
|    | |  |  | 
---------------- ---------------- 

그래서, 당신은 Collection 1이 선택되어 있음을 알 수 위.

이제 앱은 가로 및 세로 모두에서 사용할 수 있어야합니다. 따라서보기가 세로로 작성된 다음 가로로 표시되면 어떻게 공동 작업을 처리 할 수 ​​있습니까? 그 반대? 조회수가 생성되는 경우에도 마찬가지입니다.

필자의 경우 UIViews가 비례 적으로 조정되기를 원하며, 뷰가 한 방향으로 서로 맞닿는다면 다른 방향으로도 접촉해야합니다. 그래서 위의 풍경이된다 :

---------------- ------------------ 
|Collection 1 >| > |   |  | 
|Collection 2 | | View A |  | 
|Collection 3 | |----------------| 
|    | |  | View B | 
|    | |  |   | 
|    | ------------------ 
|    |  
---------------- 

내가 무엇을 내가 부탁 해요의 일부를 추측 : 공동 ords 실제로 회전시키지 않고 다른 방향 일 것입니다 무슨 얻는 방법이 있나요?

+0

autolayout을 사용할 계획입니까? 보기 레이아웃에 대한 접근 방식은 당신이 있는지 아닌지에 따라 다릅니다. – lxt

+0

autolayout을 사용하게되어 기쁩니다. 그러나 제 경험상 다소 복잡해지기는 어려울 수 있습니다. – cannyboy

+0

자동 크기 조절 마스크가 답이 될 수 있습니다. 나는 누군가가 이미 그 방법으로 당신을 보냈다고 생각합니다 :) – lxt

답변

1

자동 크기 조정 마스크 만 설정하면됩니다. Like view.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

편집 : 방금보기에 대한 사례를 잊어 버렸습니다. b. 보기 A에 대한 UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

: 기본보기를 들어

당신은 설정을 필요로보기 A의 높이가 감소되기 때문에 UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

, 뷰 B가 이동한다. 유연한 위쪽 여백 마스크를 설정해야합니다. 보기 B의 경우

: UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight | UIViewAutoresizingFlexibleTopMargin

난 당신이 최고 기준으로 뷰를 배치 가정이 자동 크기 마스크를 제공하는 동안. 그것은 당신이 프레임에게 당신이 그 (것)들에게 viewB.frame = CGRectMake(xCoordinate, mainView.frame.size.height - 200.0, width, height)

+0

기본보기 또는 하위보기를 의미합니까? 이게 작동하지 않을 수 있습니다. – cannyboy

+0

모든 경우에 해당됩니다. 창의 크기가 변경되었으므로 기본보기의 크기가 조정됩니다. 메인 뷰의 크기가 변경되었으므로 하위 뷰의 크기가 조정됩니다. 선택적으로 하위 뷰의 하위 뷰에 대해 자동 크기 조절 마스크를 다르게 설정할 수 있습니다. – Mert

+0

설정 한 프레임이 세로 방향 용입니다. 자동 크기 조절 마스크는 가로 모드로 전환 할 때 프레임을 변경합니다. 따라서 프로그래밍 및 설정 프레임은 세로 방향으로 생각하고 자동 크기 조정 마스크는 자동으로 크기를 변경하며 설정 방법에 따라 다릅니다. 여기 http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html에서 가능성을 발견하고 물론 조합 할 수 있습니다. – Mert

0

같은 바닥 상대가 있다면 그것은 늘 작동 viewB.frame = CGRectMake(xCoordinate, viewA.frame.origin.y + viewA.frame.size.height, width, height)

처럼보기 selfs 그 위에 배치되는의 단지 10.0와 같은 값 또는 요소를 기준으로 하나를 설정 한 의미 당신은 이동할 수 있습니다 논리에서 별도의 방법으로 좌표를 처리하고 의존적으로 iOS 버전에 usingShouldAutorotateToInterfaceOrientation 또는 shouldAutorotate에서이 메소드를 호출 당신은 파단 (보기 A와보기 B)에 대한 모든 크기 조정 마스크 "의"설정해야

1

.

viewA.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | 
         UIViewAutoresizingFlexibleWidth | 
         UIViewAutoresizingFlexibleRightMargin | 
         UIViewAutoresizingFlexibleTopMargin | 
         UIViewAutoresizingFlexibleHeight | 
         UIViewAutoresizingFlexibleBottomMargin; 

그런 다음 뷰의 모든 가장자리가 부모 뷰의 공간의 비율로 자신의 위치를 ​​유지합니다, 그렇게한다면. 예를 들어,보기 A의 프레임은 (왼쪽, 위쪽, 너비, 높이) = (0 %, 0 %, 80 %, 50 %)로 생각할 수 있으며 B보기는 (40 %, 50 %, 60 %, 50 % . 뷰의 아래쪽과 위쪽을 회전하면 수치가 여전히 다른 값이지만 50 %가됩니다. 뷰 A의 왼쪽과 위는 여전히 상위 뷰의 가장자리와 접해 있습니다. 이러한 마진은 유연하지만 마진이 0이면 변경되지 않습니다. B의 오른쪽 및 아래쪽 모서리와 동일합니다.

관련 문제