如何让CAShapeLayer()圈子根据size类调整大小

时间:2015-03-07 23:39:54

标签: ios swift geometry cashapelayer size-classes

我尝试使用CGPoint和CGFloat创建一个圆圈。但我希望根据使用的设备,siz中的圆圈不同。我改变了所有我的尺寸类以反映我想要的尺寸,我希望,它会认识到但是它并没有。

WhiteBar是我主视图中的一个UIView,我使用SB创建并测试我的视图在大小类中被更改,我设置了背景颜色并看到了我想要的设置

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

@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:任何大小的类。

提前致谢, 王牌

1 个答案:

答案 0 :(得分:0)

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

https://stackoverflow.com/a/28704658/72319