2013-01-06 2 views
4

setFrame을 사용하여 프레임을 다시 그립니다.iOS, setTransform이 setFrame에 의해 재정의 되었습니까? setFrame을 다시 실행 한 후 변환을 다시 수행하지 않음

setFrame을 사용하여 방향이 바뀌면보기가 확대됩니다. 그러나이보기는 또한 BOOL 인수에 따라 위치를 변경해야합니다. 보기에서보기,보기에서 = 아래로 내려보기. 나는 setTransform을 사용하여보기의 위치를 ​​조정합니다.

먼저 그림을 setFrame으로 그립니다. 이것은 화면의 하단에서 100 포인트 떨어진 뷰를 그립니다. 그런 다음 뷰 포인트로 변환하기 위해 변환을 설정합니다 (BOOLTRUE으로 설정된 경우 변환이 0이고 뷰가 화면에서 꺼짐).

[view setFrame:CGRectMake(0, self.view.bounds.size.height, self.view.bounds.size.width, 100)]; 
[view setTransform:CGAffineTransformMake(1, 0, 0, 1, 0, -100)] 

이 작동 잘, 예상대로,하지만 변화의 방향이 코드는 다시 실행은의 변환 것으로이 기록된다하더라도, 그리하지 않는 변환 (뷰 크기를 다시 할 때) 보기. transform.ty은 0

Log message before re-draw: view.transform.ty -10.000000 
Log message after re-draw: view.transform.ty -10.000000 

어떤 도움 것처럼 말해보기, 그냥 화면이 꺼져? bounds, centertransform :

답변

8

는 뷰의 frame는 세 가지 기본적인 값으로부터 산출되는 값이다. frame에 대한 설정자는 프로세스를 반대하여 올바른 작업을 시도하지만 transform이 아닌 ID가 설정되면 항상 올바르게 작동하지는 않습니다.

documentation이 시점에서 매우 분명하다

이 건물은 정체성 변환,이 속성이 정의되지 의 값이 아니므로 무시해야 변환합니다.

... 변환 재산권 비항 변환을 포함하는 경우

프레임 속성의 값은 정의되지 수정되어서는 안된다. 그 경우 경우 center 속성을 사용하여 뷰 위치를 바꿀 수 있으며크기를 bounds 속성을 사용하여 조정할 수 있습니다.

transform은보기를 변환하기 때문에 전혀 사용하지 않습니다. 보기 프레임의 원점을 변경하십시오.

[view setFrame:CGRectMake(0, self.view.bounds.size.height - 100, self.view.bounds.size.width, 100)]; 
+0

감사합니다. – Mrwolfy