视图内的多个子视图和自动调整大小

时间:2015-09-25 23:13:41

标签: ios objective-c autolayout

我正在尝试使用以下代码创建代表徽标的组件:

- (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 个答案:

答案 0 :(得分:1)

根据UIView参考:

  

transform财产

     

指定应用于接收器的变换,   相对于其边界的中心。

注意其边界的中心&#34;。转换只是缩放了内容&#34; EllipseView的。{由于视图未在layoutSubviews中移动,因此它们保持在其位置,并且仅缩放点。

你必须使用变换吗?

您可以像在createSubviews中一样更改视图的框架。

由于您已经有了坐标,因此您可以创建CAShapeLayer,根据您的UIBezierPath数组构建带有省略号的CGRect,将该图层添加为主视图的子图层,然后按比例缩放。