Я создаю CAShapeLayer
для использования в качестве маски для слоя UIView
. Я использую UIBezierPath
для рисования слоя фигуры. Он работает отлично, но я получаю некоторые нечетные результаты, когда я рисую. Геометрия не ведет себя так, как ожидалось. Я пытаюсь сделать простой «кусок пирога» в правом верхнем углу:Почему добавление addArcWithCenter в startAngle из 0 градусов заставляет его начинать с 90 градусов?
#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 градусов?