UIBezierPath и CAShapeLayer не создают угловую линию

это мой код

public func setMaskTo(setMask:UIView, corner:UIRectCorner) -> Void {
        let round = UIBezierPath(roundedRect: setMask.bounds, byRoundingCorners: corner, cornerRadii: CGSize(width: 10, height: 10))
        let shape = CAShapeLayer()
        shape.frame = round.bounds
        shape.path = round.cgPath
        setMask.layer.mask = shape
    }

setMaskTo(setMask: self, corner: [.topLeft, .topRight])

Вот мой вывод

enter image description here

Кто-нибудь может объяснить, где я не прав? Это на Свифте 3.

Спасибо,


person Deepak Kumar Sahu    schedule 28.10.2016    source источник
comment
вы хотите создать верхний левый и правый углы вокруг определенного вида?   -  person vaibhav    schedule 28.10.2016
comment
stackoverflow.com/questions/40169745/ обратитесь к этому вопросу и ответьте   -  person Himanshu Moradiya    schedule 28.10.2016
comment
@vaibhav Да, я хочу закруглить угол UITextField. Сверху слева и справа.   -  person Deepak Kumar Sahu    schedule 28.10.2016
comment
Я думаю, что есть такая же фоновая проблема, она отлично работает в Swift 2.2.   -  person vaibhav    schedule 28.10.2016
comment
@vaibhav Работает, когда есть backgroundColor и нет borderWidth. если setMask.layer.borderColor = UIColor.orange.cgColor setMask.layer.borderWidth = 0,6 setMask.backgroundColor = UIColor.clear, то его угол не отображается.   -  person Deepak Kumar Sahu    schedule 28.10.2016
comment
@DeepakKumarSahu хорошо, тогда это здорово.   -  person vaibhav    schedule 28.10.2016
comment
Что, если мы хотим применить разные радиусы углов для всех углов? Каждый ответ касается одного и того же значения радиуса угла.   -  person Cemal BAYRI    schedule 19.02.2021


Ответы (2)


Эй, я получил ответ!!!

Попробуйте с UIBezierPath и CAShapeLayer, не создавая угловую линию

var borderShape = CAShapeLayer() 
borderShape.path = round.cgPath
borderShape.lineWidth = 1.0
borderShape.strokeColor = UIColor.blue.cgColor
borderShape.fillColor = nil
borderShape.frame = setMask.bounds
setMask.layer.addSublayer(borderShape)
person Deepak Kumar Sahu    schedule 11.11.2016

Лучше использовать общее расширение:

extension UIView {

func roundedCorners(corners: UIRectCorner, conrnerRadius: CGFloat) {

    let rectShape = CAShapeLayer()
    rectShape.bounds = self.frame

    rectShape.position = self.center
    rectShape.path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: [UIRectCorner.TopLeft , UIRectCorner.TopRight], cornerRadii: CGSizeMake(conrnerRadius, conrnerRadius)).CGPath

    self.layer.mask = rectShape

}
}

Вызов функции:

 oneextraview.roundedCorners(corners: [UIRectCorner.topRight, UIRectCorner.bottomRight], conrnerRadius: 10.0)
 oneextraview.layer.borderColor = UIColor.redColor().CGColor
 oneextraview.layer.borderWidth = 5.0
 oneextraview.layer.masksToBounds = true

Примечание. Либо объявите расширение в файле ViewController вне класса, либо в отдельном файле swift.

выход

person Himanshu Moradiya    schedule 28.10.2016
comment
Можете ли вы добавить ширину границы и цвет. backgroundColor для очистки цвета. - person Deepak Kumar Sahu; 28.10.2016
comment
в виду я даю цвет фона чистый цвет и цвет границы? - person Himanshu Moradiya; 28.10.2016
comment
любой цвет для границы и любая ширина для ширины границы. Не добавляйте прозрачный или черный. Проверьте работает или нет. - person Deepak Kumar Sahu; 28.10.2016
comment
@DeepakKumarSahu Код протестирован и работает. Можете ли вы опубликовать, какой результат вы получаете? - person Supratik Majumdar; 28.10.2016
comment
stackoverflow.com/q/40303353/6280713 конец, необходимо проверить снимок экрана. - person Deepak Kumar Sahu; 28.10.2016
comment
@DeepakKumarSahu проверь мой ответ - person Himanshu Moradiya; 28.10.2016
comment
@HimanshuMoradiya Просто попробуйте с oneextraview.layer.borderWidth = 1.0 вместо 5.0 - person Deepak Kumar Sahu; 02.11.2016
comment
@DeepakKumarSahu У меня также возникает такая же проблема, когда я меняю ширину границы на 0,5f - person Himanshu Moradiya; 11.11.2016
comment
@HimanshuMoradiya: проверьте stackoverflow.com/a/40541254/6280713, он добавляет новый слой, который делает угол радиальным. - person Deepak Kumar Sahu; 11.11.2016