2016-11-07 57 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