Ios 转换属性don';不适用于CALayer
我尝试将点对象的60个副本添加到图层中,每个对象都必须具有其变换特性(以形成圆)。但由于某些原因,变换属性不适用于层。所有的点实例都放在同一个地方(12点钟)。 这是我的代码:Ios 转换属性don';不适用于CALayer,ios,calayer,catransform3d,Ios,Calayer,Catransform3d,我尝试将点对象的60个副本添加到图层中,每个对象都必须具有其变换特性(以形成圆)。但由于某些原因,变换属性不适用于层。所有的点实例都放在同一个地方(12点钟)。 这是我的代码: - (void)addDots { CGFloat angle = (2*M_PI) / 60; for (int i = 0; i < 60; i++) { CALayer *layerDot = [self addDotWithSize:7 andColor:[UIColor
- (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;
}
将旋转变换应用于圆形层,其中锚点(旋转发生的位置)位于该层的中心。你不会看到这个变换的任何效果
我认为(在你的头脑中很难做到这一点,而且我已经做过一次了)你需要将层的定位点更改为
CGPointMake(0.5,y)
,其中y是点中心到时钟中心的距离,单位为点的大小。然后,旋转将围绕该点进行,这将使点处于正确的位置 你导入了quart/core框架吗?@KishoreKumar:如果他没有导入QuartzCore,他会得到一个编译器错误。好的,所有的点都添加在代码非常清晰地声明的同一位置,然后你围绕每个点的中心旋转。为什么要改变位置?您只是缺少正确的位移或为旋转指定了正确的定位点以产生任何可见的影响。您正在addDotWithSize
中设置位置,因此更改变换不会只是旋转层(如果它是点,您不会注意到)?
- (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];
}
}