如何在UIView中获得X-Scale和Y-Scale?

时间:2012-06-05 04:58:01

标签: objective-c ios

如果我在myView中有很多子视图(所有视图都是UIView的实例)并且我设置了每个子视图的变换,可能是我的setScale,rotation等等。如何知道我设置的每个子视图的xscale和yscale它?

例如:

  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中的内容,我需要在用户设置之后知道xscale和yscale。我认为这是一个要解决的方程式,请帮助我。 ^ _ ^

谢谢你

4 个答案:

答案 0 :(得分:2)

从文档CGAffineTransform中记下函数CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy );。您可以像这样获得视图的比例

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);

答案 1 :(得分: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
}

答案 2 :(得分:0)

您可以通过 -

获取所有视图子视图
NSArray *subViews = myView.subviews;

现在,在创建子视图时,您可以为它们设置tag属性,在此基础上,您可以获取单个视图并执行所需的任务。

答案 3 :(得分:0)

一种方法是在CGRect上应用转换,然后与原始CGRect进行比较:

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