在traitCollectionDidChange期间未更新UIView帧

时间:2016-12-06 10:09:19

标签: ios swift frame calayer uitraitcollection

我根据UIView的子类中的帧使用CALayer进行了一些绘制,我需要在设备旋转时更新线,但在traitCollectionDidChange中,帧仍然保持旋转前的值。有没有办法在旋转后获取帧的更新值?

我的绘图代码如下所示,在其视图控制器的traitCollectionDidChange中调用:

func setup() {

    layer.sublayers?.removeAll()

    let xAxisLine = UIBezierPath()
    xAxisLine.move(to: CGPoint(x: 100, y: frame.height))
    xAxisLine.addLine(to: CGPoint(x: bounds.width, y: frame.height))
    let xAxisLayer = CAShapeLayer()
    xAxisLayer.path = xAxisLine.cgPath
    xAxisLayer.lineWidth = 2
    xAxisLayer.fillColor = UIColor.clear.cgColor
    xAxisLayer.strokeColor = UIColor.black.cgColor
    layer.addSublayer(xAxisLayer)
}

此部分绘制自定义图形的X轴,但更重要的是帧值是旋转前的值,因此整个图形不合适。

从视图控制器中,我通过以下方式调用它:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {

    super.traitCollectionDidChange(previousTraitCollection)

    barView.setup()
}

2 个答案:

答案 0 :(得分:2)

您不更新图形,当方向发生变化时,您始终会在视图中添加新图层。

您应该在viewDidLoad中创建图层并保存对它的引用。在traitCollectionDidChange中,您只需为图层指定一个新路径。

答案 1 :(得分:0)