문제

UIView 속성이 있습니다 frame, bounds, center, 그리고 origin, 그리고 그들은 모두 서로 관련이있는 것 같습니다. 대부분의 경우, 나는 다루고있다 frame a의 위치와 크기를 설정할 때 UIView. 나는 이해 frame 글로벌 좌표 시스템을 사용하고 있습니다 bounds 로컬 뷰의 좌표를 사용하고 있습니다 (따라서 x와 y는 0이지만 항상 그런 것은 아닙니다). 그러나 무엇을 사용 해야하는지 여전히 혼란 스럽습니다.

다른 속성과 어떤 컨텍스트 (및 적절한 시간) (어떤 상황)bounds, center, origin) 사용되어야한다?

도움이 되었습니까?

해결책

위의 마르코의 대답은 정확하지만 "어떤 맥락에서"라는 질문에 대해 확장하기 만하면 ...

액자 - 이것은 일반적인 iPhone 응용 프로그램에 가장 자주 사용하는 속성입니다. 대부분의 컨트롤은 "함유"컨트롤에 비해 배치되므로 프레임은 컨트롤이 표시 해야하는 위치에 직접 해당하며 프레임 .Size는 제어를 만드는 방법을 결정합니다.

센터 - 이것은 운동 또는 스케일링이 발생할 수있는 스프라이트 기반 게임 및 애니메이션에 중점을 둘 것입니다. 기본적으로 애니메이션과 회전은 UIView의 중심을 기반으로합니다. 프레임 속성으로 그러한 객체를 시도하고 관리하는 것은 거의 의미가 없습니다.

범위 -이 속성은 포지셔닝 속성이 아니지만 프레임에 대한 UIVIEW "Relative"의 드로잉 영역을 정의합니다. 기본적 으로이 속성은 일반적으로 (0, 0, 너비, ). 이 속성을 변경하면 프레임 외부로 그리거나 프레임 내의 작은 영역으로 드로잉을 제한 할 수 있습니다. 이것에 대한 좋은 논의는 아래 링크에서 찾을 수 있습니다. 드로잉 영역을 조정할 필요가없는 한이 속성을 조작하는 것은 드문 일입니다. 유일한 예외는 대부분의 프로그램이 [[UIScreen mainScreen] bounds] 시작시 응용 프로그램의 가시 영역을 결정하고 그에 따라 초기 UIView의 프레임을 설정합니다.

uiview에 프레임 사각형과 경계 사각형이있는 이유는 무엇입니까?

바라건대 이것은 각 속성이 사용될 수있는 상황을 명확히하는 데 도움이됩니다.

다른 팁

그것들은 관련 값이며 속성 세터/getter 메소드에 의해 일관성을 유지합니다 (프레임은 실제 인스턴스 변수에 의해 뒷받침되지 않고 순전히 합성 된 값이라는 사실을 사용합니다).

주요 방정식은 다음과 같습니다.

frame.origin = center - bounds.size / 2

(와 동일)

center = frame.origin + bounds.size / 2

(그리고 또한 또한)

frame.size = bounds.size

그것은 코드가 아니라 세 가지 속성 사이의 불변을 표현하는 방정식입니다. 이 방정식은 또한 귀하의 견해의 변환이 기본적으로 정체성이라고 가정합니다. 그렇지 않은 경우, 경계와 중앙은 동일한 의미를 유지하지만 프레임은 변경 될 수 있습니다. 오른쪽 비안형 회전을 수행하지 않는 한 프레임은 항상 수퍼 뷰 좌표 측면에서 변형 된보기가됩니다.

이 물건은 모두 유용한 미니 라이브러리로 자세히 설명합니다.

http://bynomial.com/blog/?p=24

속성 center, bounds 그리고 frame 인터 로크 : 하나를 변경하면 다른 하나를 업데이트하므로 원하는대로 사용하십시오. 예를 들어, x/y 매개 변수를 수정하는 대신 frame 최근에보기에 업데이트하십시오 center 재산.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top