Не отображать правильные закругленные углы ImageView с градиентным цветом - PullRequest
0 голосов
/ 17 мая 2018

Я создал прямоугольник, используя следующий код, и теперь мне нужно скруглить углы этого прямоугольника.Я также установил layer.cornerRadius, кто-нибудь может мне помочь?

Мой код, как показано ниже,

private func setGradientBorder(_ ivUser:UIImageView) {

    ivUser.layer.masksToBounds = true
    ivUser.layer.cornerRadius = ivUser.frame.width / 2

    let gradient = CAGradientLayer()
    gradient.frame =  CGRect(origin: CGPoint.zero, size: ivUser.frame.size)
    gradient.colors = [UIColor.blue.cgColor, UIColor.green.cgColor]

    let maskPath = UIBezierPath(roundedRect:  ivUser.bounds,
                                byRoundingCorners: [.allCorners],
                                cornerRadii: CGSize(width: ivUser.frame.width/2, height: ivUser.frame.height/2)).cgPath

    let shape = CAShapeLayer()
    shape.lineWidth = 2
    shape.path = maskPath
    shape.strokeColor = UIColor.black.cgColor
    shape.fillColor = UIColor.clear.cgColor
    gradient.mask = shape

    ivUser.layer.addSublayer(gradient)

}

output : градиент не отображается правильно округлено

enter image description here

1 Ответ

0 голосов
/ 17 мая 2018

Так работает UIBezierPath. Половина ширины линии будет идти с одной стороны фактического пути, а половина - с другой. Вот почему это выглядит как-то вырезано.

Вам нужно будет вставлять ваши пути прямо на половину ширины линии, примерно так:

let lineWidth: CGFloat = 2    
let maskPath = UIBezierPath(roundedRect:  ivUser.bounds.insetBy(dx: lineWidth/2, dy: lineWidth/2),
                                byRoundingCorners: [.allCorners],
                                cornerRadii: CGSize(width: ivUser.frame.width/2, height: ivUser.frame.height/2)).cgPath
...