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 ответ:
Очевидно, что границы слоя недостаточно велики, чтобы покрыть все изображение после обрезки углового рисунка. Таким образом, вы можете немного увеличить границы слоя, чтобы закрыть изображение вида. Вот так:
+ (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)]; }