Верхний правый и верхний левый угловой радиус не работает - PullRequest
0 голосов
/ 10 апреля 2020

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

func roundCorners(corners: UIRectCorner, radius: CGFloat) {
     let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
     let mask = CAShapeLayer()
     layer.mask = mask
     mask.path = path.cgPath
     layer.masksToBounds = true
}

this is happening when add only top corner radius

когда я добавляю угловой радиус ко всему слою, он работает нормально, this is image when i add corner radius to layer

layer view.layer.cornerRadius = radius

но я хочу только радиус верхнего угла, как я могу сделать это, не влияя на ширину вида

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Вы можете использовать нижеприведенную функцию для достижения поведения

func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
        let maskPath = UIBezierPath(
            roundedRect: bounds,
            byRoundingCorners: corners,
            cornerRadii: CGSize(width: radius, height: radius))

        let shape = CAShapeLayer()
        shape.path = maskPath.cgPath
        layer.mask = shape
    }

и просто использовать ее вот так

someview.roundCorners([.topLeft, .topRight], radius: 25)

, но ключевой момент в применении углового радиуса - это когда вы применяете! ! Вы можете применить его в методе ViewDidAppear или layoutsubviews. В основном в тех местах, где вы уверены, вы получите точную ширину и высоту вида. Спасибо !!

0 голосов
/ 10 апреля 2020

Используйте этот добавочный номер

extension UIView 
{

   @discardableResult func _round(corners: UIRectCorner, radius: CGFloat) -> CAShapeLayer {
    let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
    let mask = CAShapeLayer()
    mask.path = path.cgPath
    self.layer.mask = mask
    return mask
   }

func addBorder(mask: CAShapeLayer, borderColor: UIColor, borderWidth: CGFloat) {
    let borderLayer = CAShapeLayer()
    borderLayer.path = mask.path
    borderLayer.fillColor = UIColor.clear.cgColor
    borderLayer.strokeColor = borderColor.cgColor
    borderLayer.lineWidth = borderWidth
    borderLayer.frame = bounds
    layer.addSublayer(borderLayer)
}

func round(corners: UIRectCorner, radius: CGFloat, borderColor: UIColor, borderWidth: CGFloat) {
    let mask = _round(corners: corners, radius: radius)
    addBorder(mask: mask, borderColor: borderColor, borderWidth: borderWidth)
}
}

И вы можете позвонить по нижеуказанному коду

 self.yourView.round(corners: [.topLeft,.topRight], radius: 20, borderColor: .clear, borderWidth: 0)
...