2012-06-05 5 views
1

많은 뷰가 myView에 있고 (모든 뷰가 UIView의 인스턴스 임) 각 서브 뷰의 변형을 설정할 수 있습니다. setScale, rotation 등이 될 수 있습니다. xscale 및 yscale을 설정하는 방법은 각 서브 뷰의 설정 방법을 알고 있어야합니다. ? 예를 들어UIView에서 X 축 및 Y 축을 얻는 방법은 무엇입니까?

:

subview1.transform = CGAffineTransformMakeScale(xscale1, yscale1); 
    subview1.transform = CGAffineTransformRotate(subview1.transform, angle1); 
    subview2.transform = CGAffineTransformMakeScale(xscale2, yscale2); 
    subview2.transform = CGAffineTransformRotate(subview2.transform, angle2); 
    . 
    . 
    subviewx.transform = CGAffineTransformMakeScale(xscalex, yscalex); 
    subviewx.transform = CGAffineTransformRotate(subviewx.transform, angle3); 

예에서 사용자가 subview.transform에서 뭔가를 설정, 나는 사용자가 설정 한 후 X 스케일과 yscale를 알아야합니다. 나는 해결할 수있는 방정식이라고 생각합니다. 제발 도와주세요.^_^

감사합니다 당신에게

답변

0

당신은에 의해 뷰의 모든 서브 뷰를 얻을 수 있습니다 - 당신이 여기에 태그 속성을 설정 할 수 있습니다 전망 자녀의 생성시에 지금

NSArray *subViews = myView.subviews; 

기본보기 태그를 사용하면 개별보기를 가져 와서 원하는 작업을 수행 할 수 있습니다.

1

당신은 코드를 다음과 당신의 파단에 대한 x와 y 스케일을 얻을 수 있습니다 :

for (UIView *subview in self.yourView.subviews) 
{ 

     CGRect framelb1=subview.frame; 
     NSNumber *num; 
     NSNumber *ynum; 
     num =[NSNumber numberWithInt:framelb1.origin.x];//x-value of subview 
     ynum =[NSNumber numberWithInt:framelb1.origin.y];//y-value of subview 
} 
+0

미안 해요을하지만 코드는 생성하지 않습니다 하위 뷰의 스케일은 그들의 기원 플러스 왜이 특정 작업에 대한 for 루프에 NSNumber의 인스턴스를 만들겠습니까? –

+0

내 질문에 명확하지 않으면 죄송합니다. –

2

을 기능 CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy );의 문서 CGAffineTransform 만들기에 대 한 참고에서. 당신이

view.transform = CGAffineTransformConcat(CGAffineTransformMakeScale(2.0, 0.5), CGAffineTransformMakeRotation(M_PI_4)); 
CGFloat xScale = view.transform.a/cosf(M_PI_4); 
CGFloat yScale = view.transform.d/cosf(M_PI_4); 
+0

답장을 보내 주셔서 감사합니다. 그러나 사용자가 스케일을 설정 한 후 회전을 설정하면 결과가 수정되지 않습니다. –

+0

회전을 먼저 수행 한 다음 크기를 조정 해 보았습니까? 행렬 연산을 수행하는 순서가 중요합니다. 또한이 함수를 확인하십시오. CGAffineTransform CGAffineTransformConcat ( CGAffineTransform t1, CGAffineTransform t2 ); –

0

한 가지 방법처럼 뷰의 규모를 얻을 수있는 것은 원래 CGRect과 비교 한 후 CGRect에 변환하고 적용하는 것입니다 :

CGRect transformedBounds = CGRectApplyAffineTransform(self.bounds, self.transform); 
CGFloat currScale = transformedBounds.size.width/ self.bounds.size.width; 
관련 문제