iOS Как удалить тонкую линию границы, а затем использовать слой.структура cornerradius


Я всегда использую простой метод, чтобы получить вид закругленных углов

+ (void)setRoundedCornersByView:(UIView*) givenView roundAngle:(int)roundAngle borderWidth:(double)borderWidth borderColor:(UIColor*)borderColor alphaBorder:(double)alphaBorder {
    givenView.layer.cornerRadius = roundAngle;
    givenView.layer.borderColor = [[borderColor colorWithAlphaComponent:alphaBorder] CGColor];
    givenView.layer.borderWidth = borderWidth;
    givenView.layer.masksToBounds = YES;
}

Но теперь у меня есть тонкая граница вокруг закругленной линии, это тонкая линия, которая имеет цвет, подобный цвету фона закругленного вида

Введите описание изображения здесь

Как удалить его без использования onDraw, потому что это невозможно сделать - потому что это означает, что я должен переопределить все элементы управления iOS, где мне нужны скругленные углы.

Также попробуйте использовать

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bound byRoundingCorners:corners cornerRadii:cornerRadii];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = givenView.bounds;
maskLayer.path = maskPath.CGPath;
givenView.layer.mask = maskLayer;

Но, как вы можете видеть, он не полностью округлен

Введите описание изображения здесь

1 4

1 ответ:

Очевидно, что границы слоя недостаточно велики, чтобы покрыть все изображение после обрезки углового рисунка. Таким образом, вы можете немного увеличить границы слоя, чтобы закрыть изображение вида. Вот так:

+ (void)setRoundedCornersByView:(UIView *)givenView roundAngle:(int)roundAngle borderWidth:(double)borderWidth borderColor:(UIColor *)borderColor alphaBorder:(double)alphaBorder
{
  CGFloat offset = 1.f; // .5f is also good enough
  givenView.layer.cornerRadius = roundAngle + offset;
  givenView.layer.borderColor = [[borderColor colorWithAlphaComponent:alphaBorder] CGColor];
  givenView.layer.borderWidth = borderWidth + offset;
  givenView.layer.masksToBounds = YES;

  [givenView.layer setBounds:CGRectMake(-offset,
                                        -offset,
                                        CGRectGetWidth(givenView.frame)  + offset * 2.f,
                                        CGRectGetHeight(givenView.frame) + offset * 2.f)];
}