2013-05-13 2 views
0

모든 크기와 위치가 다른 일련의 UIBezierPath를 그립니다. 각 모양을 특정 크기로 확대하고 UIView의 특정 위치로 옮기고 싶습니다. 나는 지금 CGAffineTransformation와 함께 일하고있다. 위치와 크기가 모든 모양에서 작동하지 않기 때문에 빠르게 지저분 해지고 있습니다.모양을 동적으로 확대 및 변환

UIBezierPath을 특정 크기로 확장하고 대부분의 모양에서 작동하는 특정 위치로 변환 할 수있는 방법이 있습니까? 어쩌면 내가 모르는 변형을 사용하지 않고 도형의 크기와 위치를 설정하는 방법이 있을까요? 내가 그림을 그리는 모양은 모두 크기가 매우 다르며, 일부는 들쭉날쭉 한 가장자리를 가지고 있습니다.

이것은 내가 지금까지 나의 AffineTransformations로하고있는 일입니다. pathUIBezierPath입니다

CGAffineTransform scale = CGAffineTransformMakeScale(2.0f,2.0f); 
[path applyTransform:scale]; 

CGAffineTransform move = CGAffineTransformMakeTranslation(-10, -10); 
[path applyTransform:move]; 

.

맞습니까? 사용하고있는 값 (-10, 2.0f)은 예제 일뿐입니다.

답변

0

CGAffineTransform 나는이 문제를 해결하는 가장 좋은 방법은 CAShapeLayer로 경로를 변환 레이어의 위치와 크기를 설정하는 것입니다 생각합니다. 매우 간단하고 우아한. 그러나 구현에 따라 해결해야하는 버그가 있습니다.

myCAShapeLayer.path = myUIBezierPath.path; 
myCAShapeLayer.position = CGRectMake(x, y); 

CALayers가 멋지다!

0

원하는 것은 베 퍼 경로에 어파인 변환을 적용하는 방법입니다. 이 방법 구조가 정의되어

- (void)applyTransform:(CGAffineTransform)transform; 

:

struct CGAffineTransform { 
    CGFloat a; 
    CGFloat b; 
    CGFloat c; 
    CGFloat d; 
    CGFloat tx; 
    CGFloat ty; 
}; 
typedef struct CGAffineTransform CGAffineTransform; 

과 의미 필드 :

필드

항목에서이 방법, 당신은 할 수 있는지 행렬의 [1,1] 위치.
b
매트릭스의 [1,2] 위치에 입력하십시오.
c
매트릭스의 [2,1] 위치에있는 입력.
d
매트릭스의 [2,2] 위치에있는 입력.
tx
매트릭스의 [3,1] 위치에 입력하십시오.
ty
매트릭스의 [3,2] 위치에있는 입력.

은 참조 :
UIBezierPath

+0

나는 원래의 게시물에서 내가 현재 AffineTransformations와 협력 중이고 잘 작동하지 않는다고 언급했다. 이것이 제가해야 할 일이라고 생각한다면, 제가 어떻게 변형을 적용해야하는지에 관해 더 나은 설명을 제공해 주시겠습니까? – tentmaking

+0

질문에 답변 한 후에 코드를 추가했음을 유의하십시오. 이 코드는 정확해야하며, 작동하지 않으면 코드의 다른 부분에서 뭔가 잘못되어있는 것입니다. 원하지 않는 동작이 계속 발생하면 전체 코드를 표시하십시오. –

+0

질문에 답한 후에 코드를 추가했지만 원래 CGAffineTransformations를 사용하고 있다고 언급했습니다. 어느쪽으로 든, 나는 해결책을 발견했고, 그것을 곧 게시 할 것이다. – tentmaking

관련 문제