2012-12-12 5 views
0

UIView의 사용자 정의 하위 클래스가 있는데 BottomBox라고 부를 수 있습니다.UIView의 크기를 몇 가지 방법으로 변경할 수 있습니까?

BottomBox는 대체 방법 가지고 모두 [* 슈퍼 세트 * 각각에, 현재 및 새로운 CGRects 로깅 및 중단 호출과

-(void)setBounds:(CGRect)bounds; 

-(void)setFrame:(CGRect)frame; 

을 .

BottomBox 오브젝트는 autoresizingMask 세트 가지고

bottombox1.autoresizingMask = 
    UIViewAutoresizingFlexibleTopMargin | 
    UIViewAutoresizingFlexibleLeftMargin | 
    UIViewAutoresizingFlexibleRightMargin; 

을하고이 화면 하단에 위치된다.

BottomBox 객체는 기본 .layer 속성의 하위 레이어를 포함하며 이러한 하위 레이어는 변형되며이 레이어의 경계 상자는 BottomBox 객체의보기 경계 영역 외부로 이동합니다. 이렇게하면 프레임/경계 접근자가 조정 된 경계 값을 돌려주게됩니다.

그러나 장치 방향을 변경하면 폭 또는 높이에 유연성이없는 autoresizingMask 속성에도 불구하고 BottomBox 개체의 크기가 비정상적으로 조정됩니다. 내 경험에 의하면 경계선/프레임의 높이가 조정되지 않았지만 너비가 너무 휘어져 있습니다.

이제 경계와 프레임의 진정한 의미를 오해하고 있습니다. 아마도 실제로는 서브 뷰와 하위 계층을 기반으로 모든 액세스에 대해 즉석에서 계산됩니다.

다른 방법으로 조정할 수 있는지 알고 싶습니다. 아마도 뭔가를 바라 볼 것입니다.

답변

0

장치 회전 중에 방향 재 지정을 허용하고 뷰 크기 조정을 허용하는 UIViewController는 view.autoresizesSubviews가 YES이면 모든 하위 뷰에 영향을줍니다.

유연한 크기 조정 마스크가있는 하위 뷰는 [UIView (Geometry) _applyAutoresizingMaskWithOldSuperviewSize :] 내에서 setFrame을 호출 할 수있게합니다.

setFrame의 수신자는 자동 크기 조정 마스크에 따라 올바르게 조정 된 프레임을 수신합니다.

내 BottomBox에는 [super setFrame : frame]을 호출 한 후 프레임 인수와 프레임 인수를 검사하는 setFrame 재정의가 있습니다.

내 구현 고유 참고 : 예를 들어

하기, 432 픽셀 스퀘어는 -120 ℃, 회전 장치가 회전하고 setFrame가되는 그런 경우 589.
새로운 경계 박스를 가지고 어떤 유연한 자동 크기 조정 마스크 상수 때문에 호출되면 setFrame은 589 픽셀의 사각형 프레임 크기를받습니다. 회전이 자동으로 적용되고 다른 바운딩 상자는 803 픽셀 정사각형으로 정의됩니다.

실제로이 803 스퀘어는 실제로 589 픽셀 높이를 유지했지만 수직으로 크기가 조정되지 않았습니다. 자동 크기 조정 마스크 때문입니다. 내 구체적인 맥락에서 엄격한 바닥 여백.

요약하면 원래 432 픽셀 사각형 인보기는 803x589 픽셀 사각형으로 경계가 지정된보기로 관리됩니다. 심각하게 왜곡.

관련 문제