我在我的UIView子类中使用CALayer绘制了一些基于帧的图形,我需要在设备旋转时更新行,但是在traitcollectiondiddchange中,帧仍然保持旋转前的值。是否有方法在旋转后获取帧的更新值?
我的绘图代码如下所示,在其视图控制器的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()
}
最佳答案
如果不更新图形,则在方向更改时总是向视图中添加新图层。
您应该在viewDidLoad
中创建层并保存对它的引用。在traitCollectionDidChange
中,您只需为层指定一个新路径。