如何让 CAShapeLayer() 圆根据大小 class 调整大小

How to get CAShapeLayer() circle to resize based on the size class

我正在尝试使用 CGPoint 和 CGFloat 创建一个圆。但我希望圆圈的大小根据使用的设备而有所不同。我更改了所有 Size classes 以反映我想要的尺寸,我希望它能识别,但它没有。

WhiteBar 是我使用 SB 创建的主视图中的一个 UIView,为了测试我的视图大小发生了变化 class,我设置了背景颜色并按照我的需要查看了它的设置

我的打印行显示最小的宽度和高度

@IBOutlet var WhiteBar: UIView!
var WhiteCircle = CAShapeLayer()
WhiteCircle.strokeColor = UIColor.whiteColor().CGColor
WhiteCircle.fillColor = UIColor.clearColor().CGColor
WhiteCircle.lineWidth = 15
WhiteCircle.strokeStart = 0
WhiteCircle.strokeEnd = 1

let WhiteCenterPoint = CGPoint (x: WhiteBar.bounds.width / 2, y: WhiteBar.bounds.height / 2)
let WhiteCircleRadius : CGFloat = (WhiteBar.bounds.height / 2 -  WhiteCircle.lineWidth / 2)

println(WhiteBar.bounds.width) // outputs the smallest size of all my size classes
println(WhiteBar.bounds.height) // outputs the smallest size of all my size classes

var WhiteCirclePath = UIBezierPath(arcCenter: WhiteCenterPoint, radius: WhiteCircleRadius, startAngle: CGFloat(-0.5 * M_PI), endAngle: CGFloat(1.5 * M_PI), clockwise: true)

WhiteCircle.path = WhiteCirclePath.CGPath

WhiteBar.layoutIfNeeded()

WhiteBar.layer.addSublayer(WhiteCircle)

编辑:似乎尺寸是根据 w: 任意 h: 任意尺寸 class.

提前致谢, 王牌

大小类(或任何自动布局更改,就此而言)在 viewDidAppear 或 viewDidLayoutSubviews 之后才会应用。您需要将此代码移至其中一个。当视图从 Interface Builder 文档(xib 或故事板)加载时,您会看到视图的边界。在这些生命周期事件发生之前,您永远不应该检查框架或边界。