Aight więc chcę, aby narysować trójkąt tak:Jak narysować trójkąt z zaokrąglonymi narożnikami używając quartz2d/CoreGraphics
Obecnie używam kombinacji CAShapeLayer i tworząc ścieżkę z a UIBezierPath (kod jest poniżej), a następnie nakładając go jako maskę dla innej warstwy (self.layer, ponieważ jestem w podklasie UIView i zamiast ustawiać warstwę warstwową robię to w ten sposób, aby zachować pierwotną warstwę)
w każdym razie kod:
_bezierPath = [[UIBezierPath bezierPath] retain];
#define COS30 0.86602540378
#define SIN30 0.5
[_bezierPath moveToPoint:(CGPoint){self.frame.size.width/2.f-r*SIN30,r*COS30}];
[_bezierPath addArcWithCenter:(CGPoint){self.frame.size.width/2.f,r*COS30*2.f} radius:r startAngle:2*M_PI/3.f endAngle:M_PI/3.f clockwise:YES];
[_bezierPath addLineToPoint:(CGPoint){self.frame.size.width-r*SIN30,self.frame.size.height-r*COS30}];
[_bezierPath addArcWithCenter:(CGPoint){self.frame.size.width-r*SIN30-r,self.frame.size.height-r*COS30} radius:r startAngle:0.f endAngle:-M_PI/3.f clockwise:YES];
[_bezierPath addLineToPoint:(CGPoint){r*SIN30,self.frame.size.height-r*COS30}];
[_bezierPath addArcWithCenter:(CGPoint){r*SIN30+r,self.frame.size.height-r*COS30} radius:r startAngle:4*M_PI/3.f endAngle:M_PI clockwise:YES];
[_bezierPath closePath];
CAShapeLayer *s = [CAShapeLayer layer];
s.frame = self.bounds;
s.path = _bezierPath.CGPath;
self.layer.mask = s;
self.layer.backgroundColor = [SLInsetButton backgroundColorForVariant:SLInsetButtonColorForSLGamePieceColor(_color)].CGColor;
i niestety wynik nie jest to, czego szukałem, zamiast rogi stają się małe gałki (jakby jej obrócenie zbyt dużo)
góry dziękuję
dlaczego cos (30), a nie 60? – AlexWien
w takim przypadku, do którego się odnosisz? – DanZimm