2012-06-03 4 views
1

그래서 높이 및 너비가있는 사용자가있는 프레임으로 초기화 된 uiview,이 사용자가이 프레임을 그릴 수 있지만 사용자가 원하는 수 있지만 단추를 누르면, 그 낭비 된 여분의 공간을 잘라내어 프레임이 사용자가 그리는 것만 큼 커지 길 원합니다. 나는이 그려진 내용이 이전보다 작아 보이도록 만, 뷰의 크기를 조정, 여분의 불필요한 공간을 제거하지 않습니다, 그러나이자르기/잘라 내기 uview

CGRect boundbox = CGPathGetBoundingBox([myPath CGPath]); 
boundbox.origin.x = self.frame.origin.x; 
boundbox.origin.y = self.frame.origin.y; 
self.frame = boundbox; 

처럼 뭔가를 시도했다. 대신 내가하고 싶은 것은 "공백"을 제거하는 것입니다. uiview의 내용을 확장 할 수 있다면 생각하고 있었지만 확실하지는 않습니다. ,

enter image description here

붉은 테두리는 사용자가 버튼을 누를 경우, 유저는, 중앙에있는 텍스트가 도면에 그릴 수있는 영역/프레임이다

무슨 뜻인지 명확하게 단지

enter image description here

그림 2에서와 같이 도면을 둘러싸에 내가 지금은 다음과 같은 시나리오를 가지고 있다고 할 수있는 프레임을 원하는, 내가 화면의 중앙에 원을 그려왔다. 내가 선택한 후 버튼을 누릅니다

enter image description here

는, 규모는 동일하게 유지하지만 원은 같은 위치에 여전히 있지만, 우리는 지금 그리기 영역을 변경, 그래서 원/드로잉 오프의 컷처럼 보일 것입니다 도 4에

enter image description here

같이 할 원하는가 프레임의 중앙에 위치하도록 드로잉/지어로 이동한다. 빨간색 영역이 파란색 원을 둘러 쌉니다.

답변

1

[편집] 귀하의 도면이 주어집니다. UIView는 프레임 속성 (또는 CGRect)을 변경할 때 항목의 위치를 ​​다시 지정하지 않습니다. 이 경우 YOURSELF로 그려진 항목을 추적해야하며 버튼을 누르면 객체 번역을 직접 수행해야합니다.

당신이 의미하는 바는 가장 왼쪽에있는 물체, 가장 위에있는 물체를 찾은 다음 그 물체만큼 왼쪽으로 모든 물체를 움직여 그 양만큼 위로 움직여 모든 물체가 (그룹으로) 뷰 프레임 내에 정렬 된 좌상단. 이 후에 가장 닿는 부분이 가장 가까운 부분과 가장 아래쪽 부분이 가장 가까운 부분을 스스로 인식해야합니다.

이제 항목을 왼쪽 위로 이동 했으므로 가장 오른쪽 지점이 프레임 너비를 정의하고 가장 아래쪽 지점이 프레임 높이를 정의합니다.

원하는 경우 아래에서이 작업을 수행 한 후에 속성을 확대 할 수 있어야합니다.

[제 대답] 것은 내가 제대로 질문을 이해한다면, 당신은 여전히 ​​당신의 상자 프레임 조작을 수행 할 수 있습니다,하지만 당신은 확장하고자하는 경우는

contentScaleFactor or 
contentStretch 

특성을 조사 할 수 있습니다 .

contentScaleFactor는 단수 부동 소수점 값 (예 : xWidth * scaleFactor, yHeight * scale factor)을 기반으로 두 크기를 모두 조정해야합니다.

contentStretch는 각 차원 (축)을 개별적으로 조정해야한다는 것을 의미하는 CGRect입니다.

+0

어떻게해야할지 모르겠다. 위의 코드를 작성한 직후에 setneedsdisplay를 호출하면 올바른 크기로 그리기가 가능하지만 그리기 컨텍스트가 오른쪽에서 잘리는 것을 발견했다. 프레임의 사이즈 변경 내가해야할 일은 드로잉을 움직여 새로운 프레임의 중앙에 위치하도록하는 것입니다. 어떻게해야합니까? S – Krewie

+0

달성하려고하는 그림이 좋은 답변을 얻는 데 도움이 될 수 있습니다. 당신은 당신의 행동이 일어날 수있는 버튼을 치는 것에 대해 이야기했습니다. 당신이하려고하는 것에 대한 전체 그림은 무엇입니까? – trumpetlicks

+0

몇 가지 숫자로 질문을 업데이트했습니다. – Krewie