почему я получаю дополнительную строку в CAShapeLayer при добавлении слоя к изображению - PullRequest
0 голосов
/ 08 декабря 2018

Я использую следующий код и получаю дополнительную линию обводки слева вверху в чате чата.Пожалуйста, проверьте это изображение для справки:

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 голосов
/ 08 декабря 2018

На основе кода, который вы показали, проблем нет вообще:

enter image description here

Следовательно, проблема связана с кодом, который у вас есть не показано .Но что это за код, сказать невозможно, потому что вы не показали этот код.

Однако, предположив, я бы посоветовал вам рассмотреть это: ваш код показывает, что вы делаете изображениепросматривать изображение nil каждый раз, когда запускается ваш код.Это хорошо.Но ваш код не удаляет предыдущий существующий layer, который вы добавляли при предыдущем запуске этого кода.Поэтому я уверен, что то, что вы видите, осталось от предыдущего существующего layer, который вы забыли удалить.

Действительно, если этот код запускается несколько раз, существует большая опасность накопления подслоев надруг на друга.

...