在ios中旋转一行

在ios中旋转一行,ios,objective-c,swift,cashapelayer,catransform3d,Ios,Objective C,Swift,Cashapelayer,Catransform3d,我用直线画了加号。现在我想旋转这些线,使它看起来像一个X符号。我试着旋转这些线,但没有办法 self.shapeLayer1.transform = CATransform3DMakeRotation( (CGFloat) (GLKMathDegreesToRadians(-45)),0, 0, 0) self.shapeLayer2.transform = CATransform3DMakeRotation( (CGFloat) (GLKMathDegreesToRadians(-

我用直线画了加号。现在我想旋转这些线,使它看起来像一个X符号。我试着旋转这些线,但没有办法

 self.shapeLayer1.transform = CATransform3DMakeRotation( (CGFloat) (GLKMathDegreesToRadians(-45)),0, 0, 0)




 self.shapeLayer2.transform = CATransform3DMakeRotation( (CGFloat) (GLKMathDegreesToRadians(-45)), 0, 0, 0)

你们可以看到,我把零放在x,y,z的地方。!!我尝试了不同的值,但是colud没有得到实际的旋转。如果有人有任何想法,请与我分享。有时,直线移动到另一个点并旋转

看起来x、y、z参数定义了旋转轴。因为我们想要绕xy旋转,所以旋转轴应该是z轴,或0,0,1

self.shapeLayer1.transform = CATransform3DMakeRotation( (CGFloat) (GLKMathDegreesToRadians(45)),0, 0, 1)

self.shapeLayer2.transform = CATransform3DMakeRotation( (CGFloat) (GLKMathDegreesToRadians(-45)), 0, 0, 1)
关于围绕线的非中心点旋转的问题,如果无法重新绘制以0,0,0为中心的线,也可以使用以下代码将其转换为0,0,0,旋转,然后将其转换回需要的位置:

CGFloat tx = 1.0,ty = 2.0,tz = 0;  // Modify these to the values you need
CATransform3D t = CATransform3DMakeTranslation (tx, ty, tz);
t = CATransform3DRotate(t,(CGFloat) (GLKMathDegreesToRadians(45)),0, 0, 1);
self.shapeLayer1.transform = CATransform3DTranslate(t,-tx,-ty,-tz);

CATransform3D t = CATransform3DMakeTranslation (tx, ty, tz);
t = CATransform3DRotate(t,(CGFloat) (GLKMathDegreesToRadians(-45)),0, 0, 1);
self.shapeLayer2.transform = CATransform3DTranslate(t,-tx,-ty,-tz);

实际上我想从中心点旋转它。现在这条线移动到另一个点并旋转它。我猜你遇到了OpenGL的典型问题。默认情况下,旋转矩阵围绕0,0,0旋转。基本上你会想画一条围绕0,0,0的线,然后把它变换到你想要的地方。或者,您可以先进行变换,然后旋转,然后再进行变换。顺序很重要,但可以将矩阵相乘,因此实际计算实际上只需进行一次。你可能想读一读关于四元数的书,以及它们是如何使这一点变得神秘的。我不明白。还有其他问题。?修改了我的答案,使之包含围绕任意点的旋转。我尝试了,但它仍然从其他点旋转,而不是从中心旋转。