2016-11-07 72 views
0

我想在适当位置旋转CAShapeLayer旋转CAShapeLayer

   UIBezierPath *aPath = [UIBezierPath bezierPath]; 
      CGFloat originx = (97.5+250); 
      CGFloat originy = (205+250); 
      [aPath moveToPoint:CGPointMake(originx,originy)]; 
      [aPath addArcWithCenter:CGPointMake(originx+15, originy-30) radius:15 startAngle:DEGREES_TO_RADIANS(180) endAngle:DEGREES_TO_RADIANS(360) clockwise:YES]; 
      [aPath addLineToPoint:CGPointMake(originx+30,originy)]; 
      CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
      shapeLayer.anchorPoint = CGPointMake(originx, originy); 
      shapeLayer.path = [aPath CGPath]; 
      shapeLayer.strokeColor = [[UIColor blueColor] CGColor]; 
      shapeLayer.lineWidth = 3.0; 
      shapeLayer.fillColor = [[UIColor blueColor] CGColor]; 
      [aPath closePath]; 
      shapeLayer.transform = CATransform3DMakeRotation(310 * M_PI/180, 0.0, 0.0, 1.0); 
      [self.view.layer addSublayer:shapeLayer]; 

我想绕本身的形状(上面的代码让我的小形状周围几百像素的旋转轴内的轴的形状从

实际中心,我觉得这应该有像这样的一个anchorpoint进行控制:

shapeLayer.anchorPoint = CGPointMake(originx, originy); 

但似乎做的代码中没有。任何想法?

回答

1

anchorPoint是相对于图层的边界。您不能使用锚点来放置图层。相反,您可以将您的形状相对于零点放置,旋转并将其移动到所需点。旋转和平移通过变换完成。

+0

所以我:1)地点2)变换然后3)移动? – stevenpcurtis

+0

是的,最后两个操作是两个变换的串联。 (提示:对于测试和调试,从较小的角度(例如5°)开始比较容易,因此您可以看到图层是否朝错误的方向移动。) – clemens

+0

嗯,我可以做到这一点的唯一方法是先移动它。我觉得CATransform3D translate = CATransform3DMakeTranslation(52.7,45.46,0); 应该做的工作,但它不 – stevenpcurtis