のレイヤーのCAShapeLayer
マスクとして使用する を作成しています。UIView
を使用しUIBezierPath
てシェイプレイヤーを描画しています。描画時に奇妙な結果が得られることを除いて、正常に動作しています。ジオメトリが期待どおりに動作していません。右上隅に単純な「パイスライス」を描画しようとしています:
#define degreesToRadians(x) ((x) * M_PI / 180.0)
...
// "layer" refer's to the UIView's root layer
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame =
layer.presentationLayer ?
((CAGradientLayer *)layer.presentationLayer).bounds : layer.bounds;
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.needsDisplayOnBoundsChange = YES;
CGFloat maskLayerWidth = maskLayer.bounds.size.width;
CGFloat maskLayerHeight = maskLayer.bounds.size.height;
CGPoint maskLayerCenter =
CGPointMake(maskLayerWidth/2,maskLayerHeight/2);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:maskLayerCenter];
[path addArcWithCenter:maskLayerCenter radius:(maskLayerWidth/2)
startAngle:degreesToRadians(0) endAngle:degreesToRadians(90) clockwise:YES];
[path closePath];
maskLayer.path = path.CGPath;
layer.mask = maskLayer;
最終結果として、パイのスライスが右下隅に描画されます。円弧の最初の点は 90 度で描かれ、次に 180 度まで下がります。0 度と 90 度の角度を使用しているのに、なぜこのようになるのですか?