Я пытаюсь добавить 60 копий моего объекта Dot в слой, каждый из этих объектов должен иметь свое свойство преобразования (чтобы сформировать круг). Но по какой-то причине свойство преобразования не применяется к слоям. И все точечные экземпляры размещены на одном и том же месте (на 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];
}
}
addDotWithSize
, поэтому изменение преобразования не приведет к простому повороту слоя (чего вы не заметите, если это точка)? - person trojanfoe   schedule 13.11.2015