gpt4 book ai didi

ios - 如何使用 quartz2d/coregraphics 绘制圆角三角形

转载 作者:可可西里 更新时间:2023-11-01 03:27:49 27 4
gpt4 key购买 nike

好吧,我想像这样画一个三角形:

rounded triangle

目前,我正在使用 CAShapeLayer 的组合并使用 UIBezierPath 创建路径(代码在下面),然后将其用作另一层的掩码(self.layer,因为我在 UIView 子类中,而不是而不是设置 layerclass 我这样做是为了保留初始层)

无论如何代码:

_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;

不幸的是结果不是我想要的,而是角落变成了小旋钮(好像转得太多了)

提前致谢

最佳答案

一个聪明的 friend (John Heaton,以防你遇到他,他非常棒)让我想起了核心图形部署的 lineCap 和 lineJoin 属性。

某处:

#define border (10.f)

在你的界面中:

@property (nonatomic, strong) UIBezierPath *bezierPath;

然后在您的 init 中,创建一个像这样的短路径:

CGFloat inset = border / 2.f;
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:(CGPoint){ self.frame.size.width/2.f, inset }];
[bezierPath addLineToPoint:(CGPoint){ self.frame.size.width - inset, self.frame.size.height - inset }];
[bezierPath addLineToPoint:(CGPoint){ a, self.frame.size.height - a }];
[bezierPath closePath];

self.bezierPath = bezierPath;

然后在您的 drawRect: 方法中执行如下操作:

CGContextRef c = UIGraphicsGetCurrentContext(), context = c;
CGColorRef col = [UIColor redColor].CGColor;
CGColorRef bcol = [UIColor redColor].CGColor;
CGContextSetFillColorWithColor(c, col);
CGContextSetStrokeColorWithColor(c, bcol);
CGContextSetLineWidth(c, border);
CGContextSetLineJoin(c, kCGLineJoinRound);
CGContextSetLineCap(c, kCGLineCapRound);
CGContextAddPath(c, self.bezierPath.CGPath);
CGContextStrokePath(c);
CGContextAddPath(c, self.bezierPath.CGPath);
CGContextFillPath(c);

这将正确地为您提供三角形的圆角,还可以选择具有边框或轮廓

关于ios - 如何使用 quartz2d/coregraphics 绘制圆角三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13538262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com