我基于 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()
}