2015-09-25 35 views
2

我试图创建一个使用下面的代码,代表一个标志组件:多子视图和自动调整

- (void) createSubviews 
{ 
    CGRect path[] = { 
     CGRectMake(62.734375,-21.675000,18.900000,18.900000), 
     CGRectMake(29.784375,-31.725000,27.400000,27.300000), 
     CGRectMake(2.534375,-81.775000,18.900000,18.900000), 
     CGRectMake(4.384375,-57.225000,27.400000,27.300000), 
     CGRectMake(2.784375,62.875000,18.900000,18.900000), 
     CGRectMake(4.334375,29.925000,27.400000,27.300000), 
     CGRectMake(62.734375,2.525000,18.900000,18.900000), 
     CGRectMake(29.784375,4.475000,27.400000,27.300000), 
     CGRectMake(-21.665625,-81.775000,18.900000,18.900000), 
     CGRectMake(-31.765625,-57.225000,27.400000,27.300000), 
     CGRectMake(-81.615625,-21.425000,18.900000,18.900000), 
     CGRectMake(-57.215625,-31.775000,27.400000,27.300000), 
     CGRectMake(-81.615625,2.775000,18.900000,18.900000), 
     CGRectMake(-57.215625,4.425000,27.400000,27.300000), 
     CGRectMake(-21.415625,62.875000,18.900000,18.900000), 
     CGRectMake(-31.765625,29.925000,27.400000,27.300000)}; 

    for (int i = 0; i < 16; i++) { 
     CGRect rect = CGRectApplyAffineTransform(path[i], 
      CGAffineTransformMakeScale(self.frame.size.width/213.0, 
            self.frame.size.height/213.0)); 
     EllipseView * v = [[EllipseView alloc] initWithFrame: 
       CGRectOffset(rect, self.frame.size.width/2.0, self.frame.size.height/2)]; 
     v.tag = 90000 + i; 
     v.tintColor = self.tintColor; 
     [self addSubview:v]; 
    } 
    self.initialLenght = self.frame.size.width; 
} 

-(void) layoutSubviews 
{ 
    CGFloat ratio = self.frame.size.width/self.initialLenght; 
    for (int i = 0; i < 16; i++) { 
     EllipseView * v = (EllipseView*)[self viewWithTag:90000+i]; 
     v.transform = CGAffineTransformMakeScale(ratio, ratio); 
    } 
} 

我使用CGAffineTransform操作不好受。有关如何处理视图中的多个子视图并将它们重新设置为组的任何提示?

enter image description here

回答

1

按照UIView参考:

transform属性

指定变换施加到接收器, 相对于其边界的中心。

请注意“边界的中心”。该转换只是缩放EllipseView的“内容”。由于视图并未在layoutSubviews中移动,因此它们仍保留在其位置上,只有点被缩放。

您是否需要使用转换?

您可能会像在createSubviews中那样更改视图的框架。

正如你已经有了坐标,您可以创建一个CAShapeLayer,根据您CGRect阵列椭圆打造UIBezierPath,添加层作为子到主视图,然后扩展这一点。

相关问题