UIView의 프레임, 경계, 중심, 원점, 언제 무엇을 사용해야합니까?


195

UIView속성이있다 frame, bounds, center, 그리고 origin, 그들은 모두가 상호 것으로 보인다. 대부분의 시간 frame과 위치를 설정할 때 처리 합니다 UIView. frame전역 좌표 시스템을 bounds사용하고 로컬 뷰의 좌표를 사용 한다는 것을 이해합니다 (따라서 x와 y는 0이지만 항상 그런 것은 아닙니다).하지만 무엇을 사용 해야하는지 여전히 혼란 스럽습니다.

어떤 상황에서 다른 속성 ((오른쪽 시간은 무엇인가) bounds, center, origin)를 사용한다?


아래 링크가 가장 적합합니다. stackoverflow.com/questions/5361369/…
Ohmy

사진과 함께 프레임 대 경계 : stackoverflow.com/a/28917673/3681880
Suragch

답변:


240

위의 마르코의 대답은 정확하지만 "어떤 상황에서"라는 질문을 확장하는 것입니다 ...

frame- 일반적인 iPhone 응용 프로그램에 가장 자주 사용하는 속성입니다. 대부분의 컨트롤은 "포함"컨트롤을 기준으로 배치되므로 frame.origin은 컨트롤을 표시해야하는 위치와 직접 일치하며 frame.size는 컨트롤의 크기를 결정합니다.

센터 - 이것은 당신이 가능성이 스프라이트 기반의 게임 및 이동이나 크기 조정이 발생할 수있는 애니메이션에 대해 초점을 맞출 것이다 속성입니다. 기본적으로 애니메이션 및 회전은 UIView의 중심을 기준으로합니다. frame 속성으로 이러한 객체를 시도하고 관리하는 것은 거의 의미가 없습니다.

bounds- 이 속성은 위치 지정 속성이 아니지만 UIView "드롭"의 드로어 블 영역을 프레임에 정의합니다. 기본적으로이 속성은 일반적으로 (0, 0, width , height )입니다. 이 속성을 변경하면 프레임 외부로 그리거나 프레임 내 더 작은 영역으로 드로잉을 제한 할 수 있습니다. 이에 대한 자세한 설명은 아래 링크를 참조하십시오. 도면 영역을 조정할 필요가없는 한이 속성을 조작하는 것은 일반적이지 않습니다. 유일한 예외는 대부분의 프로그램이 [[UIScreen mainScreen] bounds]시작시 응용 프로그램의 표시 영역을 결정하고 그에 따라 초기 UIView의 프레임을 설정하는 것입니다.

왜 UIView에 프레임 사각형과 경계 사각형이 있습니까?

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


33
bounds뷰에 변환이 적용될 때 일반적으로 사용되는 것을 추가하는 것이 좋습니다. 이러한 상황에서는 frame속성이 정의되지 않습니다. 같이, 다른 답변으로 지적를 수정 center하고 bounds각각 뷰의 위치와 크기를 수정하는 동일합니다.
스튜어트

36

그것들은 관련 값이며 속성 설정 기 / getter 메소드에 의해 일관성을 유지합니다 (그리고 프레임은 실제 인스턴스 변수가 아닌 순수하게 합성 된 값이라는 사실을 사용합니다).

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

frame.origin = center - bounds.size / 2

(와 동일)

center = frame.origin + bounds.size / 2

(또한 있습니다)

frame.size = bounds.size

그것은 코드가 아니라 세 속성 사이의 불변을 표현하는 방정식입니다. 이 방정식은 또한 뷰의 변환이 기본적으로 ID라고 가정합니다. 그렇지 않은 경우 경계와 중심은 동일한 의미를 유지하지만 프레임은 변경 될 수 있습니다. 직각이 아닌 회전을 수행하지 않는 한 프레임은 항상 수퍼 뷰 좌표로 변환 된 뷰가됩니다.

이 내용은 유용한 미니 라이브러리로 자세히 설명되어 있습니다.

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


18

속성은 center, boundsframe연동되어 하나가 너무 그러나 당신이 원하는 그들을 사용, 다른 사람을 업데이트합니다 변경. 예를 들어, 최근 frame뷰로 x / y 매개 변수를 수정하는 대신 center속성을 업데이트하면 됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.