为什么在将图层添加到图像视图时在CAShapeLayer中获得额外的行

时间:2018-12-08 08:56:57

标签: objective-c chat uibezierpath cashapelayer

我正在使用以下代码,并且在聊天气泡的左上角有一条额外的笔触线。请检查此图像以供参考:

UIRectCorner corners;

if (type == BubbleTypeSomeoneElse)
{
    self.bubbleImage.image = nil;
    corners = UIRectCornerBottomRight|UIRectCornerTopRight|UIRectCornerTopLeft;
}
else {
    self.bubbleImage.image = nil;
    corners = UIRectCornerBottomLeft|UIRectCornerTopRight|UIRectCornerTopLeft;
}

// space between each bubble
self.bubbleImage.frame = CGRectMake(x, y, width + self.data.insets.left + self.data.insets.right, height + self.data.insets.top-10 + self.data.insets.bottom);

UIBezierPath *path  = [UIBezierPath bezierPathWithRoundedRect:self.bubbleImage.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(7, 7)];

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bubbleImage.bounds;
maskLayer.path  = path.CGPath;

CAShapeLayer *borderLayer = [[CAShapeLayer alloc] init];
borderLayer.frame = self.bubbleImage.bounds;
borderLayer.path  = path.CGPath;
borderLayer.lineWidth   = 1.0f;
borderLayer.strokeColor = [UIColor blackColor].CGColor;
borderLayer.fillColor   = [UIColor clearColor].CGColor;

[self.bubbleImage.layer addSublayer:borderLayer];

请让我知道我在上面的代码中做错了什么,如果在我的代码注释中需要更多信息,我将尽快提供。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

根据您显示的代码,完全没有问题:

enter image description here

因此,问题是由于您未显示 的代码引起的。但是该代码是什么,无法说,因为,呃,您还没有显示该代码。

但是,我建议您考虑一下:您的代码表明,每次运行代码时,您都在制作图像视图的图像nil。那很好。但是您的代码不会删除您先前在此代码运行时添加的先前存在的layer。因此,我敢打赌,您看到的内容是您先前遗忘删除的现有layer遗留下来的。

实际上,如果此代码多次运行,则存在将子层彼此叠加的巨大危险。