У меня есть UIView
(350x350) с классом, в котором я создаю круг в середине представления (x: frame.width/2
, y: frame.height/2
). Теперь я хочу, чтобы UIView
было меньше на меньших устройствах. Я использую ограничения раскадровки для этого. Вид становится меньше, но круг все еще использует 350px для вычисления центра.
![enter image description here](https://i.stack.imgur.com/RD5nt.png)
![enter image description here](https://i.stack.imgur.com/uo2Tg.png)
Вот как я создаю круг:
fileprivate func loadBgProgressBar() {
let startAngle = CGFloat(-Double.pi / 2)
let endAngle = CGFloat(3 * Double.pi / 2)
let centerPoint = CGPoint(x: frame.width/2 , y: frame.height/2)
let gradientMaskLayer = gradientMaskBg()
bgProgressLayer.path = UIBezierPath(arcCenter:centerPoint, radius: frame.width/2 - 10.0, startAngle:startAngle, endAngle:endAngle, clockwise: true).cgPath
bgProgressLayer.backgroundColor = UIColor.clear.cgColor
bgProgressLayer.fillColor = nil
bgProgressLayer.strokeColor = UIColor.black.cgColor
bgProgressLayer.lineWidth = 4.0
bgProgressLayer.strokeStart = 0.0
bgProgressLayer.strokeEnd = 1.0
gradientMaskLayer.mask = bgProgressLayer
layer.addSublayer(gradientMaskLayer)
}
fileprivate func gradientMaskBg() -> CAGradientLayer {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = bounds
gradientLayer.locations = [0.0, 1.0]
let colorTop: AnyObject = CustomColor.flipside.cgColor
let colorBottom: AnyObject = CustomColor.flipside.cgColor
let arrayOfColors: [AnyObject] = [colorTop, colorBottom]
gradientLayer.colors = arrayOfColors
return gradientLayer
}