为什么我在向图像视图添加图层时在 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
遗留下来的。
确实,如果此代码运行多次,则存在将子层堆叠在一起的巨大危险。
我正在使用以下代码,我在聊天气泡的左上角多了一条笔划线。请查看此图片以供参考:
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
遗留下来的。
确实,如果此代码运行多次,则存在将子层堆叠在一起的巨大危险。