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

why i get extra line in CAShapeLayer while adding layer to image view

我正在使用以下代码,我在聊天气泡的左上角多了一条笔划线。请查看此图片以供参考:

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

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

提前致谢!!

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

因此问题是由于您显示的代码所致。但是那个代码是什么,是不可能说的,因为,呃,你没有显示那个代码。

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

确实,如果此代码运行多次,则存在将子层堆叠在一起的巨大危险。