我尝试将60个Dot对象的副本添加到图层,每个对象必须具有其transform属性(以形成圆圈)。但由于某些原因,转换属性不适用于图层。并且所有点实例都放在同一个地方(12点钟和时钟点)。 这是我的代码:
- (void)addDots {
CGFloat angle = (2*M_PI) / 60;
for (int i = 0; i < 60; i++) {
CALayer *layerDot = [self addDotWithSize:7 andColor:[UIColor blueColor]];
layerDot.transform = CATransform3DMakeRotation(i*angle, 0.0, 0.0, 1.0);
[self.layer addSublayer:layerDot];
}
}
- (CALayer *)addDotWithSize:(float)size andColor:(UIColor *)color {
CALayer *dotLayer = [[CALayer alloc] init];
dotLayer.bounds = CGRectMake(0.0, 0.0, size, size);
dotLayer.position = CGPointMake(rectMain.size.width/2, 20);
dotLayer.backgroundColor = color.CGColor;
dotLayer.cornerRadius = size/2;
dotLayer.masksToBounds = YES;
return dotLayer;
}
我做错了什么?
更新
真是某种愚蠢的问题)。重点是 - 就在它之前,我用CAReplicatorLayer完成了我想要的,并将其属性instanceTransform
设置为CATransform3DMakeRotation(angle, 0.0, 0.0, 1.0)
- 做了诀窍。为了某种原因,我尝试使用layer.transfom ...我想我需要休息。
更新2
要以圆形形式容纳点,您需要做下一步(希望这对某些人有帮助):
- (void)addDots {
CGFloat angle = (2*M_PI) / 60;
CGFloat angle90Offset = ((90) / 180.0 * M_PI);
float x0 = CGRectGetMidX(rectMain);
float y0 = CGRectGetMidY(rectMain);
float radius = rectMain.size.width/2 - 20;
for (int i = 0; i < 60; i++) {
CALayer *layerDot2 = [self addDotWithSize:size andColor:[UIColor darkGrayColor]];
layerDot2.position = CGPointMake(x0 + cos(angle*i - angle90Offset) * radius, y0 + sin(angle*i - angle90Offset) * radius);
[self.layer addSublayer:layerDot2];
}
}
答案 0 :(得分:0)
您正在将旋转变换应用于圆形图层,其中锚点(旋转发生的位置)位于该图层的中心。您不会看到该转换带来任何影响。
我认为(你脑子里很难做到这些,而且我已经做了一段时间了,你需要这样做)将图层的锚点更改为CGPointMake(0.5,y)
,其中y是从点的中心到时钟中心的距离,以点的大小为单位。然后旋转将围绕该点进行,这应该将您的点放在正确的位置。