如何删除带有角半径的CALayer周围的丑陋边框?

泽米尔科

我正在使用Core Graphics绘制一个简单的折线图。我创建了一个LineChart继承自的自定义类UIControl在此图表的顶部,我想添加一个小的填充圆圈,该圆圈将在触摸时进行动画处理(更改边框颜色)。

这是我在每个(x,y)点的圆的代码。

var layer = CALayer()
layer.borderColor = UIColor.whiteColor().CGColor
layer.backgroundColor = UIColor.blackColor().CGColor
layer.cornerRadius = 8
layer.borderWidth = 4
layer.frame = CGRect(x: xValue, y: yValue, width: 16, height: 16)
self.layer.addSublayer(layer)

我想要一个带有白色边框的黑色中心。问题是我的外部白色边框周围有一个很小的丑陋的黑色边框。

CALayer周围的小丑陋边框

我如何摆脱这个边界?我玩过抗锯齿设置,或者添加了一些Core Graphics,顶部带有一个1px的小白色边框,但两者均无法解决。黑色背景始终闪着光芒,并创造了这个外部边界。我见过CALayer Border奇怪的问题,但不敢相信我真的必须在每个数据点添加两层。

用户名

解决该问题的一种方法是创建的自定义子类,CALayer并重写该drawInContext方法以绘制带边框的圆。这是类的实现

@implementation DotLayer

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super init];
    if ( self )
    {
        self.frame = frame;
        self.backgroundColor = [UIColor clearColor].CGColor;
        self.borderColor = [UIColor whiteColor].CGColor;
        [self setNeedsDisplay];
    }
    return( self );
}

- (void)setBorderColor:(CGColorRef)borderColor
{
    [super setBorderColor:borderColor];
    [self setNeedsDisplay];
}

- (void)drawInContext:(CGContextRef)context
{
    CGRect rect = self.bounds;
    CGContextSetFillColorWithColor( context, self.borderColor );
    CGContextFillEllipseInRect( context, rect );

    rect = CGRectInset( self.bounds, 4, 4 );
    CGContextSetFillColorWithColor( context, [UIColor blackColor].CGColor );
    CGContextFillEllipseInRect( context, rect );
}

@end

这是添加点的代码

    DotLayer *layer = [[DotLayer alloc] initWithFrame:CGRectMake( xValue, yValue, 16, 16 )];
    [self.layer addSublayer:layer];

这是更改点的边框颜色的代码

    layer.borderColor = [UIColor greenColor].CGColor;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章