2015-03-11 3 views
4

Я всегда использую простой метод, чтобы получить вид закругленных угловIOS, как удалить тонкую пограничную линию затем использовать layer.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; 
} 

Но теперь я получил тонкую рамку вокруг закругленной линии, это тонкая линия, которая имеет цвета, как цвет фона округлой зрения

enter image description here

Как удалить его без использования 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; 

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

enter image description here

+2

У меня была такая же проблема в http://stackoverflow.com/questions/28822940/ios-clean-corners-for-rounded-profile-image – milesper

+0

Если используется цифровой измеритель цвета смотреть по краям округленного вида вы увидите, что есть несколько пикселей, которые представляют собой цвет фона и цвет представления, и это то, что делает iOS, чтобы края выглядели менее зубчатыми. Я не думаю, что вы можете с этим поделать. Он делает то же самое, используете ли вы закругленные углы или маску. – rdelmar

+0

Можете ли вы создать второй, чуть больший округленный вид, пустой с 'backgroundColor = [UIColor clearColor]' и установите 'borderColor' таким же, как ваш первый вид. Затем поместите второй вид сверху первого (в zorder) с равными их центрами, таким образом, второе представление будет охватывать дрябловые биты? –

ответ

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