我正在尝试使用以下代码创建代表徽标的组件:
- (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
操作。有关如何在视图中处理多个子视图并让它们作为一组进行大小调整的任何提示吗?
答案 0 :(得分:1)
根据UIView
参考:
transform
财产指定应用于接收器的变换, 相对于其边界的中心。
注意其边界的中心&#34;。转换只是缩放了内容&#34; EllipseView
的。{由于视图未在layoutSubviews
中移动,因此它们保持在其位置,并且仅缩放点。
你必须使用变换吗?
您可以像在createSubviews
中一样更改视图的框架。
由于您已经有了坐标,因此您可以创建CAShapeLayer
,根据您的UIBezierPath
数组构建带有省略号的CGRect
,将该图层添加为主视图的子图层,然后按比例缩放。