在ios中旋转一条线

时间:2014-08-04 06:02:45

标签: ios objective-c swift cashapelayer catransform3d

我有使用线条绘制的加号。现在我想旋转这些线条,使它看起来像一个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没有得到实际的旋转。如果有人有任何想法,请与我分享。有时线条移动到另一个点并旋转。

1 个答案:

答案 0 :(得分:1)

看起来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);